尝试从常规输入网格内插数据,并在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
的插值这么远?我确实怀疑可能在笛卡尔网格上运行并反转了输入数据的y轴,但仍然没有运气。
最佳答案
是的,在提交此内容之前,我想我应该尝试调用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)
RectBivariateSpline Docs
interp2d.__call__(x, y, dx=0, dy=0)
Interp2d Docs
Github上还有一个相关问题:https://github.com/scipy/scipy/issues/3164
关于python - Scipy的RectBivariateSpline返回错误的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39541991/