我将在球坐标网格上采样的信号映射到圆柱坐标网格。显然两者都不是统一的网格。两个网格的大小都是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)
{1}方向的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
所以,我想知道我将如何使用Python / NumPy / SciPy进行这种非unform 2D插值?我知道有rectbivariatespline
,但您的原始数据似乎必须在统一的网格上。感谢。
答案 0 :(得分:2)
您正在使用interp2d
错误地调用创建的对象。它的call method有参数
x:1D数组,要插入的网格的x坐标 y:1D数组,要插入的网格的y坐标。
因此,您应该传递像cylindrical_x, cylindrical_y
这样的1D数组,而不是从它们创建的meshgrid。
即使在创建时,interp2d也不需要meshgrid:请参阅example in documentation,它使用x和y的1D数组。
有一个rectbivariatespline,但似乎您的原始数据必须在统一网格上。
它必须位于网格上,而不是统一网格。例如,具有x坐标1,3,10和y坐标-3,2的6个点有资格作为网格。网格是可以通过单独的1D数组指定的任何内容,就像我上面所做的那样,而不是元组数组。
对于球体上的插值,有RectSphereBivariateSpline。 但是我不明白你是如何期望通过2D插值来实现从球形到圆柱形的转换,因此无法就此采用适当的方法。