Python内存错误(Unix vs Windows)
我正在开发一个应用程序,它载入大的JPEG2000图像并将它们转换为TIF。稍后,它会提取像素数据并进行一些处理。它完美的作品,除了在一种情况下:Python内存错误(Unix vs Windows)
当我加载最大的图像和提取数据(10956x10956数组)时,程序崩溃,但它只在Windows上崩溃 - 从不在Linux上。 (我想要一个便携式应用程序)。
我检测到这个问题,这是因为20x20内插到图像采样时出现内存错误。
f=RectBivariateSpline(x,y,Sun_angles)
xnew = numpy.linspace(x.min(),x.max(),rows)
ynew = numpy.linspace(y.min(),y.max(),columns)
Sun_angles_new = f(xnew, ynew) #here it crashes
我也试图与interp2d
和mapcoordinates
,我得到了相同的结果。
Python的应该是完全可移植的,但我得到的印象是Unix系统(参见:Running python on a Windows machine vs Linux)优化
注:我在两个不同的计算机,但具有相同的处理器和RAM运行程序。
因此......可能是什么原因?是否有其他插值与更少的内存消耗?
注意:一种解决方案是将图像划分为瓦片并进行插值。
您应该检查windows下应用程序的内存使用情况。考虑到如果为每个像素分配内存,原始图像的大小将达到〜360MB(假设为24位图像),这将会倍增,并且可能轻易超过32位地址空间的内存要求(您是限于〜2GB的Windows应用程序)
在Linux上,您可能正在运行一个64位的Linux,它运行的是64位版本的Python。对于桌面应用程序而言,这个限制几乎无法实现(在地址空间用完之前,您将会耗尽交换空间)。
是的,图像很大,但没有太多(大约250M,因为它被编码为12位)。你是对的,当我达到2.32M时,程序显示内存错误。我试图分割图像,插入片段......但它是无用的。最后我需要把所有的东西合并成一个,然后再次崩溃.... – gorro
哪个体系结构(32位和64位)是每个操作系统? –
我再次检查和内存是相同的,但处理器是不同的。在Windows中,它是一个Core2Duo 32位,在Linux中是Intel i5 64位......对不起。 – gorro
可能存在不同的指令集或其他原因,但动态内存仍然相同...... – gorro