我正在使用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。
感谢任何帮助。谢谢。
答案 0 :(得分:2)
我怀疑问题是Tx
和Ty
对于MATLAB的interp2
函数和scipy.interpolate.interp2d
来说意味着不同。
在MATLAB interp2
函数中,Tx
和Ty
将是2D数组,用于指定每个输出点的x,y坐标,因此结果将是一个与Tx
和Ty
具有相同形状的向量,即:
timg(i, j, 1) = interp2(x, y, Img(i, j, 1), Tx(i, j),Ty(i, j), 'cubic');
在scipy.interpolate.interp2d
中,Tx
和Ty
应该是一维向量,用于指定常规网格的行和列的x和y坐标插值将被评估,即:
timg[i, j, 0] = intp(Tx[i], Ty[j])
我怀疑您要传递要插入的每个点的坐标,在这种情况下,您将获得(nx*ny, nx*ny)
输出。如果nx = 298
和ny = 142
则会生成(42316, 42316)
数组。假设它包含64位浮点数,那么总共需要大约14GB的内存。