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 

我也试图与interp2dmapcoordinates,我得到了相同的结果。

Python的应该是完全可移植的,但我得到的印象是Unix系统(参见:Running python on a Windows machine vs Linux)优化

注:我在两个不同的计算机,但具有相同的处理器和RAM运行程序。

因此......可能是什么原因?是否有其他插值与更少的内存消耗?

注意:一种解决方案是将图像划分为瓦片并进行插值。

+2

哪个体系结构(32位和64位)是每个操作系统? –

+0

我再次检查和内存是相同的,但处理器是不同的。在Windows中,它是一个Core2Duo 32位,在Linux中是Intel i5 64位......对不起。 – gorro

+0

可能存在不同的指令集或其他原因,但动态内存仍然相同...... – gorro

您应该检查windows下应用程序的内存使用情况。考虑到如果为每个像素分配内存,原始图像的大小将达到〜360MB(假设为24位图像),这将会倍增,并且可能轻易超过32位地址空间的内存要求(您是限于〜2GB的Windows应用程序)

在Linux上,您可能正在运行一个64位的Linux,它运行的是64位版本的Python。对于桌面应用程序而言,这个限制几乎无法实现(在地址空间用完之前,您将会耗尽交换空间)。

+0

是的,图像很大,但没有太多(大约250M,因为它被编码为12位)。你是对的,当我达到2.32M时,程序显示内存错误。我试图分割图像,插入片段......但它是无用的。最后我需要把所有的东西合并成一个,然后再次崩溃.... – gorro