代码之家  ›  专栏  ›  技术社区  ›  Nick X Tsui

2D插值导致溢出错误:要插值的数据点太多

  •  4
  • Nick X Tsui  · 技术社区  · 6 年前

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

    当我运行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来处理这个非unform2D插值?我知道有一个 rectbivariatespline ,但您的原始数据似乎必须位于统一的网格上。谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   user6655984 user6655984    6 年前

    您正在调用使用创建的对象 interp2d 不正确。它的 call method 有参数

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

    因此,应该传入1D数组,如 cylindrical_x, cylindrical_y 而不是从中创建网格网格。

    即使在创建时,interp2d也不需要网格网格:请参见 example in documentation ,它对x和y使用1D数组。

    有一条矩形二元样条线,但您的原始数据似乎必须位于统一的网格上。

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


    对于球体上的插值,有 RectSphereBivariateSpline 。 但我不明白你是如何期望通过2D插值实现从球形到圆柱形的转换的,所以我无法建议合适的方法。