2D 插值导致 OverflowError: Too much data point to interpolate

Nic*_*sui 5 python interpolation 2d numpy scipy

我正在将球坐标网格上采样的信号映射到柱坐标网格。显然两者都不是统一的网格。两个网格的大小均为 256 X 864(行 X 列)。

所以我尝试了这样的事情:

f = interp2d(x, y, z, kind='cubic')
zz= f(xx, yy)
Run Code Online (Sandbox Code Playgroud)

这里,

x, y = meshgrid(spherical_x, spherical_y)
xx, yy = meshgrid(cylindrical_x, cylindrical_y)
Run Code Online (Sandbox Code Playgroud)

一维方向上所有的spherical_x, spherical_y, cylindrical_x, and cylindrical_y都是不均匀的。

当我运行 interp2D 时,出现一条错误消息,其中显示:

  File "C:\Users\MyComputer\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\interpolate\_fitpack_impl.py", line 48, in _intc_overflow
    raise OverflowError(msg)

OverflowError: Too many data points to interpolate
Run Code Online (Sandbox Code Playgroud)

所以,我想知道我将如何使用 Python/NumPy/SciPy 进行这种非均匀 2D 插值?我知道有一个rectbivariatespline,但似乎你的原始数据必须位于统一的网格上。谢谢。

小智 1

您正在错误地调用创建的对象interp2d。它的调用方法有参数

x :一维数组,要在其上进行插值的网格的 x 坐标。
y :一维数组,要在其上进行插值的网格的 y 坐标。

因此,您应该传入一维数组,cylindrical_x, cylindrical_y而不是从它们创建的网格。

即使在创建时,interp2d 也不需要 meshgrid:请参阅文档中的示例,该示例使用一维数组作为 x 和 y。

有一个 rectbivariatespline,但似乎你的原始数据必须位于统一的网格上。

它必须在网格上,而不是统一的网格上。例如,x 坐标为 1, 3, 10,y 坐标为 -3, 2 的 6 个点就符合网格的条件。网格是可以由单独的一维数组指定的任何东西,就像我上面所做的那样,而不是元组数组。


对于球体上的插值,有RectSphereBivariateSpline。但我不明白您期望如何通过二维插值从球形到圆柱形的转换,因此无法建议适当的方法。

  • 但错误是在调用 interp2d 期间抛出的,而不是调用 f 时抛出的。这并不能解释为什么 interp2d(x, y, z, kind='cubic')` 会失败,因为文档说二维数组适合该数组。 (3认同)