2011-08-15 8 views
6

Mam 2048x2048 oczek nieregularnych danych zi = f(xi, yi), które są zasadniczo trzema niezależnymi zestawami 2048 wartości rzeczywistych. Muszę płynnie interpolacji (może Bicubic splajn), który w regularnych oczkach wi = f(ui, vi) gdzie ui i vi są wartości całkowitą od 0 do 2047.Interpolacja 2D dużej nieregularnej siatki z regularną siatką

próbowałem griddata który wydaje się działać dobrze na obrazy mniej niż 1000x1000, ale wieje aż do 1500x1500 (błędy pamięci QHull dla Delauney Mesh ewidentnie). Spojrzałem na niektóre z funkcji ndimage, a mianowicie geometric_transform, RectBivariateSpline i map_coordinates, ale wszystkie wydają się przyjmować regularyzowane dane jako dane wejściowe. Mogę czegoś przegapić i po prostu źle to zastosować!

Próbuję użyć Python/SciPy, aby zrobić to, co ten skrypt Matlaba robiłem przy użyciu tformarray i makeresampler. Wszelkie sugestie dotyczące funkcji, której mogę użyć do przetworzenia tego dużego zestawu danych? Dzięki!

+4

Chciałbym spojrzeć na to pytanie: http://stackoverflow.com/questions/1972172/interpolating-a-scalar-field-in-a-3d-space Użyłem wcześniej interpolacji Sheparda z powodzeniem i może praca dla Ciebie. – Yann

Odpowiedz

2

Próbowałem odtworzyć Twoje błędy bez powodzenia. Czy korzystasz z systemu 32-bitowego? Miałem problemy z scipy/numpy i dużymi tablicami tak przełączonymi na 64-bitowe i od tego czasu nie miałem żadnych problemów.

Oto kod kiedyś spróbować odtworzyć swój błąd (będzie generować nic użytecznego, ale powinien przynajmniej poczuć te same błędy):

y,x=indices([2048,2048],dtype='float64') 
z = randn(2048,2048) 
yr = y + randn(2048,2048) 
xr = x + randn(2048,2048) 
zn = griddata(xr.ravel(),yr.ravel(),z.ravel(),x,y) 
zl = griddata(xr.ravel(),yr.ravel(),z.ravel(),x,y,interp='linear') 

To działa na moim komputerze.

Jeśli nie możesz uruchomić 64-bitowej wersji Pythona (co może być trudne w zależności od używanego systemu operacyjnego), czy możesz złamać siatkę 2048x2048 na 4 siatki 1024x1024?

+0

Musiałem włączyć punkty wejściowe i punkty wyjścia w krotki, aby uruchomić griddata(). Na moim Macu 2011 z 12 GB twój kod zrobił 1024x1024 w 33 sekundy, a 2048x2048 w 184 s. –

+0

Ten kod nie działa. Oprócz importu, musisz łączyć wejścia griddata() w jedną krotkę jako '(xr.ravel(), yr.ravel()) i tak samo z wyjściami:' (x, y) ' –

Powiązane problemy