尝试从常规输入网格内插数据,并在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_funbivar_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/

10-11 22:52