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

2024-09-29 01:36:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在将一定数量的(在本例中为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。。。在

有人知道发生了什么事吗?(详见下文)

其他一些细节: -我使用的是32位的winpython32位(可移植),因为我无法安装“正确的”Python发行版(出于测试目的,我在Python 2.7.9.4和3.4.3.3之间切换) -我被迫在一台有4GB的电脑上使用32位的Windows7,所以3.5GB可用/我尝试在另一台计算机上执行我的脚本(Win7 64位,16GB RAM)

谢谢你能给我的任何帮助。在


Tags: oftheto图像imagenumpyfor数组
1条回答
网友
1楼 · 发布于 2024-09-29 01:36:00

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

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

相关问题 更多 >