【发布时间】:2011-11-25 09:41:01
【问题描述】:
我正在开发一个加载大型 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 系统进行了优化(另请参阅:Running python on a Windows machine vs Linux)
注意:我在两台不同的计算机上运行该程序,但使用相同的处理器和 RAM。
因此...可能是什么原因?还有其他内存消耗更少的插值吗?
注意:一种解决方案是将图像分割成图块并进行插值。
【问题讨论】:
-
每个操作系统是哪种架构(32 位和 64 位)?
-
我再次检查,内存是一样的,但处理器不同。在 Windows 中它是 Core2Duo 32 位,在 linux 中是 Intel i5 64 位......对不起。
-
可能是指令集不同或者其他原因,但是动态内存还是一样的......
-
所有 Core 2 CPU 都是 64 位的,但这并不意味着什么。在 Windows 中,您可以通过查看计算机属性窗口中的“系统类型”条目来检查实际运行的体系结构(右键单击开始菜单中的“计算机”)。在 Linux 上,您可以运行
getconf LONG_BIT,它将打印32或64。