BMi*_*ell 5 python interpolation scipy
我正在使用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))
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否有更好的(更优雅的,Pythonic?)方式来实现相同的结果?
其一,你可以做
for Xtmp,Ytmp in zip(X,Y):
...
Run Code Online (Sandbox Code Playgroud)
在你的循环中。或者甚至更好,只是
out = [float(f_interp(XX,YY)) for XX,YY in zip(X,Y)]
Run Code Online (Sandbox Code Playgroud)
替换循环。
另一方面,我建议改为使用interpolate.griddata。它的表现往往比 好得多interp2d,并且它接受任意形状的点作为输入。正如您所看到的,interp2d插值器只会返回网格上的值。
| 归档时间: |
|
| 查看次数: |
4811 次 |
| 最近记录: |