2011-08-15 96 views
6

我有2048x2048網格不規則數據zi = f(xi, yi),它們基本上是三個獨立的2048個實數值集合。我需要平滑地插入(也許是雙三次樣條),即進入wi = f(ui, vi)其中uivi規則的網格是整數值從0到2047將大型不規則網格2D插值到常規網格

我已經試過的GridData這似乎在圖像小於1000×1000很好地工作,但打擊達到1500x1500(顯然Delauney Mesh的內存錯誤)。我查看了一些ndimage函數,即geometric_transform,RectBivariateSplinemap_coordinates,但它們似乎都將正則化數據作爲輸入。我可能會錯過一些東西,只是實施它也是錯的!

我想用Python/SciPy來做這個Matlab腳本,我一直在使用tformarraymakeresampler。對於我可以用來處理這個大型數據集的函數有什麼建議?謝謝!

+4

我會看看這個問題:http://stackoverflow.com/questions/1972172/interpolating-a-scalar-field-in-a-3d-space 我以前用過Shepard插值成功,它可能會爲你工作。 – Yann

回答

2

我試圖重現你的錯誤沒有成功。你在32位系統上?我有scipy/numpy和大型陣列的問題,所以切換到64位,並從那時起沒有問題。

這裏是我曾經嘗試重現你的錯誤代碼(它會產生什麼有用的,但至少應該遇到同樣的錯誤):

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') 

此工程在我的機器上。

如果你不能運行一個64位版本的python(根據你使用的操作系統不同,這可能很難),你能否將2048x2048網格劃分爲4個1024x1024網格?

+0

我必須將輸入點和輸出點分別轉換爲元組才能運行griddata()。在我的2011年12GB的MacBook上,您的代碼在33秒內完成了1024x1024,在184秒內完成了2048x2048 –

+0

代碼無法運行。除了導入之外,還需要將griddata()輸入一起封裝到一個元組中作爲'(xr.ravel(),yr.ravel())'並且與輸出相同:'(x,y)' –