2014-02-06 114 views
2

我不知道我在做什麼錯。我試圖使用scipy griddata在不規則網格中插入數據。Scipy Griddata輸出尺寸

from scipy.interpolate import griddata 

我有兩個列表「x」和「y」,它們表示我的原始非插值網格的座標軸。它們都是長度爲8的列表。

然後,我製作代表預期最終填充網格座標軸的數組。

ny = np.linspace(0.0, max(y), y[len(y)-1]/min_interval+1) 
nx = np.linspace(0.0, max(x), len(ny)) 

我檢查過,「ny」和「nx」的形狀都是(61,)。然後,我創建一個8 x 8列表「z」。最後,我試圖讓我的最終網格。

Z = griddata((np.array(x), np.array(y)), np.array(z), (nx, ny), method='nearest', fill_value=0) 
print Z.shape 

得到的二維數組具有尺寸(61,8)。我嘗試使用「x」和「y」作爲列表和數組 - 不變。爲什麼只是在一個方向插入?我期待(61,61)數組輸出。 如果我覺得它會有幫助,我會包括實際的數字,但我不明白它會如何改變。我不明白griddata是如何工作的嗎?

回答

0

下面是完整的代碼:

import numpy as np 
from scipy.interpolate import griddata 

# random data to interpolate 
x = np.array([0, 10, 13, 17, 20, 50, 55, 60.0]) 
y = np.array([10, 20, 40, 80, 90, 95, 100, 120.0]) 
zg = np.random.randn(8, 8) 

#select one of the following two line, it depends on the order in z 
#xg, yg = np.broadcast_arrays(x[:, None], y[None, :]) 
xg, yg = np.broadcast_arrays(x[None, :], y[:, None]) 

yg2, xg2 = np.mgrid[y.min()-10:y.max()+10:100j, x.min()-10:x.max()+10:100j] 

zg2 = griddata((xg.ravel(), yg.ravel()), zg.ravel(), (xg2.ravel(), yg2.ravel()), method="nearest") 
zg2.shape = yg2.shape 

import pylab as pl 

pl.pcolormesh(xg2, yg2, zg2) 
pl.scatter(xg.ravel(), yg.ravel(), c=zg.ravel()) 

輸出爲:

enter image description here

+0

謝謝!! 似乎ravel()是答案,你的圖形幫助我意識到我想要一個線性插值(現在可以與ravel一起使用),而不是最接近的插值! – adeedoubleu