SciPy interp2d内存错误,寻找替代方案

时间:2016-03-08 15:48:25

标签: numpy scipy interpolation

我正在使用NumPy和SciPy将MATLAB程序转换为Python程序,我还是新手。在程序的一部分中,我有以下MATLAB代码:

tImg(:,:,1) = interp2(x,y,Img(:,:,1),Tx,Ty,'cubic');

interp2方法中的所有参数均为298x142 double。

所以我尝试将其转换为以下Python代码:

tImg[:, :, 0] = (scipy.interpolate.interp2d(x, y, img[:, :, 0], kind='cubic'))(Tx, Ty)

我在interp2d方法中给出了MemoryError。 MATLAB代码运行正常。我已经阅读了插值文档,但我似乎找不到解决方案。

我使用3GB内存运行上面的代码,scipy为0.16.0。

感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

我怀疑问题是TxTy对于MATLAB的interp2函数和scipy.interpolate.interp2d来说意味着不同。

在MATLAB interp2函数中,TxTy将是2D数组,用于指定每个输出点的x,y坐标,因此结果将是一个与TxTy具有相同形状的向量,即:

timg(i, j, 1) = interp2(x, y, Img(i, j, 1), Tx(i, j),Ty(i, j), 'cubic');

scipy.interpolate.interp2d中,TxTy应该是一维向量,用于指定常规网格的行和列的x和y坐标插值将被评估,即:

timg[i, j, 0] = intp(Tx[i], Ty[j])

我怀疑您要传递要插入的每个点的坐标,在这种情况下,您将获得(nx*ny, nx*ny)输出。如果nx = 298ny = 142则会生成(42316, 42316)数组。假设它包含64位浮点数,那么总共需要大约14GB的内存。