[英]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.