【问题标题】:2D interpolation results in OverflowError: Too many data points to interpolate2D 插值导致 OverflowError: Too many data points to interpolate
【发布时间】:2018-03-28 06:15:52
【问题描述】:

我正在将在球坐标网格上采样的信号映射到圆柱坐标网格。显然两者都不是统一的网格。两个网格的大小均为 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)

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 处理这种非非均匀 2D 插值?我知道有一个rectbivariatespline,但您的原始数据似乎必须在一个统一的网格上。谢谢。

【问题讨论】:

  • 也许可以尝试使用底图进行重新投影

标签: python numpy scipy 2d interpolation


【解决方案1】:

您错误地调用了使用interp2d 创建的对象。它的call method 有参数

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

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

即使在创建时,interp2d 也不需要 meshgrid:请参阅example in documentation,它使用一维数组表示 x 和 y。

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

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


对于球体上的插值,有RectSphereBivariateSpline。 但我不明白您如何期望通过 2D 插值从球面转换为圆柱面,因此无法就此提出适当的方法。

【讨论】:

  • 但是在调用 interp2d 时抛出了错误,而不是调用 f。这并不能解释为什么 interp2d(x, y, z, kind='cubic') 会失败,因为文档说 2d 数组适用于那个。
  • 我遇到了同样的问题。原来我真的积分太多了。当我将数组的长度减少到最大约 10000 个元素时,它起作用了。
  • interp2d 适用于二维数组。 docs.scipy.org/doc/scipy/reference/generated/…
猜你喜欢
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
相关资源
最近更新 更多