2D插值导致OverflowError错误:数据点过多,无法插值。

5
我正在将一个在球坐标网格上采样的信号映射到柱面坐标网格上。很明显,这两种网格都是不均匀的。两个网格的大小都为256 X 864(行 X 列)。
因此我尝试了以下方法:
f = interp2d(x, y, z, kind='cubic')
zz= f(xx, yy)

这里,
x, y = meshgrid(spherical_x, spherical_y)
xx, yy = meshgrid(cylindrical_x, cylindrical_y)

当我运行interp2D时,出现了错误信息,提示:spherical_x、spherical_y、cylindrical_x 和 cylindrical_y在一维方向上都不均匀。

  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

所以,我在想用Python/NumPy/SciPy如何处理这个非均匀的二维插值?我知道有一个rectbivariatespline,但似乎原始数据必须在一个均匀网格上。谢谢。


也许尝试使用basemap来进行重投影。 - Jason
1个回答

1
您使用interp2d创建的对象调用方式有误。它的call方法需要以下参数:

x:1D数组,插值网格的x坐标。
y:1D数组,插值网格的y坐标。

因此,您应该传入类似于cylindrical_x,cylindrical_y的1D数组,而不是由它们创建的meshgrid。

即使在创建时,对于interp2d也不需要meshgrid:请参见文档中的示例,其中使用1D数组作为x和y。

虽然有一个rectbivariatespline,但原始数据必须在均匀网格上。

它必须在网格上,而不是一个 均匀的 网格。例如,具有 x 坐标为 1、3、10 和 y 坐标为 -3、2 的 6 个点符合网格条件。网格是指可以通过单独的 1D 数组来指定的任何内容,就像我上面所做的那样,而不是元组数组。


在球面上进行插值可以使用RectSphereBivariateSpline。但我不明白你希望通过二维插值实现从球坐标系到柱坐标系的转换,因此无法建议适当的方法。

3
错误发生在对interp2d的调用中,而不是对f的调用中。这并不能解释为什么interp2d(x,y,z,kind='cubic')应该失败,因为文档中说2D数组对其没有问题。 - Galactic Ketchup
1
我遇到了同样的问题。结果发现我的点实在是太多了。当我将数组长度减少到最多约10000个元素时,它就可以工作了。 - Nigu
interp2d函数可以很好地处理二维数组。 https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html - Devin Burke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接