【问题标题】:2D Interpolation of Large Irregular Grid to Regular Grid大型不规则网格到规则网格的 2D 插值
【发布时间】:2011-08-15 17:10:06
【问题描述】:

我有 2048x2048 网格的不规则数据zi = f(xi, yi),它们本质上是三组独立的 2048 个实数值。我需要将其平滑地插值(可能是双三次样条)到 wi = f(ui, vi) 的常规网格中,其中 uivi 是从 0 到 2047 的整数值。

我尝试过 griddata,它似乎在小于 1000x1000 的图像上运行良好,但是当你达到 1500x1500 时就会爆炸(显然 Delaunay Mesh 的内存 qhull 错误)。我看过一些ndimage 函数,即geometric_transformRectBivariateSplinemap_coordinates,但它们似乎都将正则化数据作为输入。我可能会遗漏一些东西,但也可能实施错误!

我正在尝试使用 Python/SciPy 来完成我使用 tformarraymakeresampler 一直在做的这个 Matlab 脚本。关于我可以使用什么函数来处理这个大型数据集的任何建议?谢谢!

【问题讨论】:

标签: python numpy grid scipy interpolation


【解决方案1】:

我试图重现您的错误但没有成功。你是32位系统吗?我遇到了 scipy/numpy 和大型数组的问题,所以切换到 64 位,从那时起就没有问题了。

这是我用来尝试重现您的错误的代码(它不会产生任何有用的信息,但至少应该会遇到相同的错误):

y,x=indices([2048,2048],dtype='float64')
z = randn(2048,2048)
yr = y + randn(2048,2048)
xr = x + randn(2048,2048)
zn = griddata(xr.ravel(),yr.ravel(),z.ravel(),x,y)
zl = griddata(xr.ravel(),yr.ravel(),z.ravel(),x,y,interp='linear')

这适用于我的机器。

如果您无法运行 64 位版本的 python(这可能会很困难,具体取决于您使用的操作系统),您能否将 2048x2048 网格分成 4 个 1024x1024 网格?

【讨论】:

  • 我必须将输入点和输出点分别转换为元组才能运行 griddata()。在我 2011 年 12GB 的 Macbook 上,您的代码在 33 秒内完成 1024x1024,在 184 秒内完成 2048x2048
  • 代码不起作用。除了导入之外,您还需要将 griddata() 输入包装到一个元组中,如 (xr.ravel(),yr.ravel()) 并与输出相同:(x,y)
猜你喜欢
  • 2014-03-08
  • 2013-03-13
  • 2018-08-14
  • 2023-03-10
  • 2011-03-15
  • 1970-01-01
  • 2011-12-03
  • 2013-08-26
  • 1970-01-01
相关资源
最近更新 更多