我使用scipy.interpolate.interp2d
为曲面创建插值函数。然后我有两个真实的数据数组,我想计算插值点。如果我将这两个数组传递给interp2d
函数,我将得到所有点的数组,而不仅仅是点对。
我的解决方案是将两个数组压缩成一个坐标对列表,并将其传递给循环中的插值函数:
f_interp = interpolate.interp2d(X_table, Y_table,Z_table, kind='cubic')
co_ords = zip(X,Y)
out = []
for i in range(len(co_ords)):
X = co_ords[i][0]
Y = co_ords[i][1]
value = f_interp(X,Y)
out.append(float(value))
我的问题是,有更好的(更优雅,蟒蛇?)达到同样效果的方法?
最佳答案
首先,你可以
for Xtmp,Ytmp in zip(X,Y):
...
在你的圈子里。或者更好,只是
out = [float(f_interp(XX,YY)) for XX,YY in zip(X,Y)]
更换回路。
换个角度来说,I suggest using
interpolate.griddata
。它的性能比interp2d
好得多,它接受任意形状的点作为输入。如您所见,interp2d
插值器将只返回网格上的值。