如何将数组传递到Scipy插值矩形二元样条中?

2024-06-01 04:24:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个Scipy插值的RectBivariateSpline,如下所示:

import numpy as np
from scipy.interpolate import RectBivariateSpline

x = np.array([1,2,3,4])
y = np.array([1,2,3,4,5])
vals = np.array([
    [4,1,4,4,2],
    [4,2,3,2,6],
    [3,7,4,3,5],
    [2,4,5,3,4]
])

rect_B_spline = RectBivariateSpline(x, y, vals)

然后我尝试传入一个x和y点数组:

a = np.array([3.2, 3.8, 2.2])
b = np.array([2.4, 4.3, 3.3])

print(rect_B_spline(a, b))

我得到的错误如下:

Traceback (most recent call last):
  File "path/file", line 18, in <module>
    print(rect_B_spline(a, b))
  File "/path/scipy/interpolate/fitpack2.py", line 728, in __call__
    raise ValueError("Error code returned by bispev: %s" % ier)
ValueError: Error code returned by bispev: 10

当我将grid=False参数传递给方法时,此错误得到了纠正。

我对documentation的印象是,如果输入的网格坐标形成一个规则的网格,那么网格参数应该为True。我有什么遗漏吗?


Tags: pathrectimport网格错误npscipycall
2条回答

这是有效的:

RectBivariateSpline(x,y,vals)([2.2,3.2,3.8],[2.4,3.3,4.3],grid=True)

array([[ 3.197056,  2.75356 ,  2.38796 ],
       [ 6.408896,  3.56696 ,  3.46736 ],
       [ 5.768704,  4.33264 ,  3.10824 ]])

RectBivariateSpline(x[:,None],y,vals)(a,b,grid=False)
# array([ 6.408896,  3.10824 ,  2.75356 ])

我按照文档中的说明对这些值进行了排序:

If grid is True: evaluate spline at the grid points defined by the coordinate arrays x, y. The arrays must be sorted to increasing order.

是的,这里的文档可能有点弱。您使用的默认调用要求x和y定义网格点。与创建样条曲线拟合的原始调用一样,这些函数需要严格按升序排列。然后它将返回样条曲线插值的完整网格。

如果你使用矩形变量PLIN EV(席,彝),在你的例子中调用矩形Buth.Type。EV(A,B),你得到在每个(席席[0,Y](0)],…,(XI[J],Y[j])数据对中评估的样条。

不太确定你想要在这里-如果你想要一个完整的x,y网格,使每个点在x,y严格上升。如果要在一系列点上获得结果,请使用.ev(x,y)方法。

相关问题 更多 >