SciPy interp2D用于坐标对

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?)方式来实现相同的结果?

And*_*eak 1

其一,你可以做

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插值器只会返回网格上的值。