繁体   English   中英

MemoryError试图将Numpy 2D数组转换为3D数组

[英]MemoryError trying to convert Numpy 2D arrays into a 3D array

我在将一定数量(在本例中为153个)的Numpy 2D数组转换为3D数组时遇到麻烦(这些2D数组代表灰度图像-即2048x2048x1-以处理图像序列而不是一组2D图像)。 我需要它来获取随时间变化的每个像素值形成的信号(解决此问题后,使用Numpy应该很方便)。

我的代码是(几乎)以下内容:

zdim = len(imglist) # 'imglist' a Python list of the path for each image I need to process
windowspan = 512
xmin = ymin = 2
xmax = ymax = xmin + windowspan

sequence = []
for i in range(zdim):
    hdulist = fits.open(imglist[i],'readonly') # allow to open FITS image files
    hdr = hdulist[0].header['DATE-OBS'] # fetch the image date/time
    img = fc.readfitsimg(imglist[i]) # return a np ndarray (2D)
    patch = img[ymin:ymax, xmin:xmax] # take a small of the original image
    print("patchSize : " + str(patch.size*4))
    sequence.append(patch) # adding to the list
    print("it : " + str(i))
sequence = np.array(sequence) # transform to numpy array

约85次迭代后,解释器将返回MemoryError。

任何人都会对发生的事情有任何暗示吗? (请参阅下面的一些详细信息)

其他一些细节:-我使用WinPython 32位(便携式),因为我无法安装“适当的” Python发行版(出于测试目的,我在Python 2.7.9.4和3.4.3.3之间进行了切换)-我被迫使用32位Windows 7,在一台具有4GB,因此3.5GB可用的PC上,我尝试在另一台计算机上执行脚本(Win7 64位,16GB RAM)

感谢您为我提供的任何帮助。

当计算机的RAM内存不足时,将发生MemoryError 在这种情况下,当您达到85x512x512的限制时,将所有图像添加到多维数据集中时似乎用完了。 如果这是代码的唯一问题,我建议使用memmap将结果直接保存到硬盘驱动器而不是RAM中。 当您打开拟合文件fits.open(..., memmap=True)时,memmap选项也可用。 在这种情况下,仅打开光盘中的映像,然后读取所需的部分,而不是将整个映像加载到RAM中。

但是我怀疑这里的真正问题是,您一直在打开fits文件而在循环末尾没有任何关闭(对于您的情况为hdu.close())。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM