创建真正的大Python列表

时间:2015-06-04 06:18:51

标签: python arrays list numpy crash

我正在尝试创建与cPickle兼容的图像数据库。最初列表为空。目录中每个图像的数据作为新行添加到列表中。图像是224x224。图像大小平均为8KB。加载10000张图像后,我的电脑挂起。没有鼠标移动。什么都没发生。需要重启。下面是执行此操作的代码片段。

cr=csv.reader(open(csv_file,"rb"))
    for row in cr:
        print row[0], row[1]
        try: 
            image=Image.open(row[0]+'.jpg').convert('LA')
            pixels=[]
            pixels=[f[0] for f in list(image.getdata())]
            #pix=np.array(image)
            dataset.append(pixels)
            #dataset.append(pix)
            labels.append(row[1]) 
            del image

        except: 
            print("image not found")

我尝试将图像尺寸缩小到28X28并且可以正常工作。但我不想减小图像的大小。我正在使用python 64位可执行文件。内存为4GB。 Ubuntu 14.04。我怀疑这是由于有限的堆栈空间而发生的,并且列表占用的空间超过可用堆栈空间。如果是这样,我如何创建这个巨大的列表?这个问题有什么解决方法吗?我的最终目标是创建一个以像素数据为行的numpy数组。目前我正在将列表转换为numpy数组..是否有解决此问题的方法?

1 个答案:

答案 0 :(得分:0)

如果数据最终将是numpy数组,可以尝试使用numpy.memmap。它的工作方式类似于“普通”numpy数组,区别在于数据实际上是以二进制形式存储在磁盘上。只有请求的数组块放在RAM中,因此可以解决您的问题。

如果确定了数据数组的大小,则只需在创建memmap对象时设置正确的维度。如果没有,请退房 numpy.memmap.resize,你应该能够创建它。

哦,还有其他解决方案,例如PyTables 祝你好运!

相关问题