Scipy的RectBivariateSpline返回错误的值?

时间:2016-09-17 01:19:35

标签: python numpy scipy

尝试从常规输入网格中插入数据,并在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轴,但仍然没有运气。

1 个答案:

答案 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_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