大型不规则网格的2D插值到正则网格

6
我有一个不规则数据的2048x2048网格zi = f(xi, yi),它实际上是三组独立的2048个实数值。 我需要将其平滑地插值(可能是双三次样条),成为一个由wi = f(ui, vi) 的规则网格,其中uivi是从0到2047的整数值。
我已经尝试了griddata函数,在小于1000x1000像素的图像上表现良好,但是在1500x1500以上的图像上会出现内存qhull错误。我看过一些ndimage函数,包括geometric_transform、RectBivariateSpline和map_coordinates,但它们似乎都需要规则化输入数据。当然,我也可能缺少某些内容或者实现方式不正确!
我正在尝试使用Python/SciPy来处理这个大数据集,类似于我一直在使用的Matlab脚本中的tformarray和makeresampler函数。请问有什么函数可以用来处理这个大数据集吗?谢谢!

4
我会看这个问题:https://dev59.com/AEvSa4cB1Zd3GeqPbAiD 我以前用过Shepard插值并且很成功,它可能适用于你。 - Yann
1个回答

2

我尝试复现您的错误,但没有成功。 您使用的是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年Macbook上,配备12GB内存,您的代码在33秒内完成了1024x1024的计算,而2048x2048则需要184秒。 - Dave X
代码无法运行。除了导入之外,您需要将griddata()的输入一起包装成一个元组,如(xr.ravel(),yr.ravel()),并且输出也是如此:(x,y) - Dave X

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