尝试从常规输入网格中插入数据,并在scipy.interpolate.interp2d
的文档中看到了这一点:
另请参见RectBivariateSpline如果你的话,那么更快的2D插值 输入数据在网格上
所以我尝试使用scipy.interpolate.RectBivariateSpline
代替interp2d
。这两个函数的文档看起来非常相似,所以我希望这会产生类似的结果:
import numpy as np
from scipy.interpolate import RectBivariateSpline, interp2d
from .constants import data
x_coords = y_coords = np.arange(data.shape[0]) # Square array
interp_fun = interp2d(x_coords, y_coords, data)
bivar_fun = RectBivariateSpline(x_coords, y_coords, data)
data[250, 60] # 76.1451873779
interp_fun(60, 250) # 76.14518738
bivar_fun(60, 250, grid=False) # 345.24444
我说错了吗?我不知道为什么基于RectBivariateSpline
的插值是如此遥远?
我确实怀疑RectBivariateSpline
可能在笛卡尔网格上运行并反转输入数据的y轴,但仍然没有运气。
答案 0 :(得分:1)
是的,就在提交之前我想我应该尝试拨打bivar_fun(y, x)
而不是bivar_fun(x, y)
,事情会突然发生:
data[250, 60] # 76.1451873779
interp_fun(60, 250) # 76.14518738
bivar_fun(250, 60, grid=False) # [ 76.14518738]
仍然不太清楚为什么,因为interp_fun
和bivar_fun
的第一个论点应该是相同的:
RectBivariateSpline.__call__(x, y, mth=None, dx=0, dy=0, grid=True)
interp2d.__call__(x, y, dx=0, dy=0)
Github还有一个相关的问题:https://github.com/scipy/scipy/issues/3164