Numpy SciPy interp2d内存错误,正在寻找替代方法

Numpy SciPy interp2d内存错误,正在寻找替代方法,numpy,scipy,interpolation,Numpy,Scipy,Interpolation,我正在使用NumPy和SciPy将一个MATLAB程序转换成Python程序,我对它还是新手。在部分程序中,我有以下MATLAB代码: tImg(:,:,1) = interp2(x,y,Img(:,:,1),Tx,Ty,'cubic'); interp2方法中的所有参数均为298x142双精度 因此,我尝试将其转换为以下Python代码: tImg[:, :, 0] = (scipy.interpolate.interp2d(x, y, img[:, :, 0], kind='cubic')

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

tImg(:,:,1) = interp2(x,y,Img(:,:,1),Tx,Ty,'cubic');
interp2方法中的所有参数均为298x142双精度

因此,我尝试将其转换为以下Python代码:

tImg[:, :, 0] = (scipy.interpolate.interp2d(x, y, img[:, :, 0], kind='cubic'))(Tx, Ty)
我在interp2d方法中获得MemoryError。MATLAB代码运行良好。我已经阅读了插值文档,但似乎没有找到解决方案

我使用3GB内存和scipy 0.16.0运行上述代码


感谢您的帮助。谢谢

我怀疑问题在于
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
应该是1D向量,用于指定要在其上计算插值的规则网格的行和列的x和y坐标,即:

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

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

谢谢您的回答。然而,即使我尝试不使用Tx和Ty,即
scipy.interpolate.interp2d(x,y,img[:,:,0],kind='cubic')
,我仍然会遇到内存错误。所以我怀疑这与scipy的内部实现有关。因此,我正在寻找一种可以获得相同输出的替代方案。我无法重现您所描述的问题。您能否通过展示如何为
x
y
img
生成一些虚假数据,将您的描述转化为可复制的测试用例?