Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python内存错误(Unix与Windows)_Python_Linux_Memory - Fatal编程技术网

Python内存错误(Unix与Windows)

Python内存错误(Unix与Windows),python,linux,memory,Python,Linux,Memory,我正在开发一个应用程序,加载大JPEG2000图像并将其转换为TIF。随后,它提取像素数据并进行一些处理。除了一种情况外,它完全可以工作: 当我加载最大的映像并提取数据(10956x10956数组)时,程序崩溃,但它只在Windows上崩溃——在Linux上永远不会崩溃。(我想要一个便携式应用程序) 我检测到了问题,这是因为在对图像采样插值20x20时出现内存错误 f=RectBivariateSpline(x,y,Sun_angles) xnew = numpy.linspace(x.min

我正在开发一个应用程序,加载大JPEG2000图像并将其转换为TIF。随后,它提取像素数据并进行一些处理。除了一种情况外,它完全可以工作:

当我加载最大的映像并提取数据(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系统优化的(另请参见:)

注意:我在两台不同的计算机上运行该程序,但使用相同的处理器和RAM

因此。。。原因可能是什么?还有其他内存消耗较少的插值吗


注意:一种解决方案是将图像分块并插值。

您应该在windows下检查应用程序的内存使用情况。考虑到如果为每个像素分配内存,原始图像的大小将约为360MB(假设为24位图像),这将成倍增加,并且很容易超过32位地址空间的内存要求(windows应用程序限制为~2GB)


在linux上,您可能运行的是64位linux,它运行的是64位版本的python。桌面应用程序几乎无法达到这一限制(在地址空间用完之前,交换空间很快就会用完)。

您应该在windows下检查应用程序的内存使用情况。考虑到如果为每个像素分配内存,原始图像的大小将约为360MB(假设为24位图像),这将成倍增加,并且很容易超过32位地址空间的内存要求(windows应用程序限制为~2GB)


在linux上,您可能运行的是64位linux,它运行的是64位版本的python。桌面应用程序几乎无法达到这一限制(在地址空间用完之前,交换空间会很快用完)。

每个操作系统是哪种体系结构(32位对64位)?我再次检查,内存相同,但处理器不同。在windows中是32位的Core2Duo,在linux中是64位的Intel i5…抱歉。可能有不同的指令集或其他原因,但动态内存仍然相同…所有Core2 CPU都是64位的,但这并不意味着什么。在Windows中,您可以通过查看“计算机属性”窗口中的“系统类型”条目(右键单击“开始”菜单中的“计算机”)来检查实际运行的体系结构。在Linux上,您可以运行
getconf LONG_-BIT
,它将打印
32
64
。每个操作系统是哪种体系结构(32位对64位)?我再次检查,内存相同,但处理器不同。在windows中是32位的Core2Duo,在linux中是64位的Intel i5…抱歉。可能有不同的指令集或其他原因,但动态内存仍然相同…所有Core2 CPU都是64位的,但这并不意味着什么。在Windows中,您可以通过查看“计算机属性”窗口中的“系统类型”条目(右键单击“开始”菜单中的“计算机”)来检查实际运行的体系结构。在Linux上,您可以运行
getconf LONG_BIT
,它将打印
32
64
。是的,图像很大,但没有那么大(因为它是用12位编码的,所以大约有250米)。你说得对,当我达到2.32M时,程序显示内存错误。我试着分割图像,逐块插值…但没用。最后,我需要将所有的片段连接在一起,然后它再次崩溃……是的,图像很大,但没有那么大(大约2.5亿,因为它是用12位编码的)。你说得对,当我达到2.32M时,程序显示内存错误。我试着分割图像,逐块插值…但没用。最后,我需要把所有的部分连接在一起,然后它再次崩溃。。。。