我不确定我做错了什么。我正在尝试使用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
得到的2D阵列具有尺寸(61,8)。我尝试使用“x”和“y”作为列表和数组 - 没有变化。为什么它只在一个方向内插?我期待一个(61,61)阵列输出。 如果我认为它会有所帮助,我会包含实际数字,但我不知道它会如何产生影响。我不明白griddata是如何工作的吗?
答案 0 :(得分:1)
以下是完整代码:
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())
输出是: