我正在尝试创建与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数组..是否有解决此问题的方法?
答案 0 :(得分:0)
如果数据最终将是numpy数组,可以尝试使用numpy.memmap
。它的工作方式类似于“普通”numpy数组,区别在于数据实际上是以二进制形式存储在磁盘上。只有请求的数组块放在RAM中,因此可以解决您的问题。
如果确定了数据数组的大小,则只需在创建memmap
对象时设置正确的维度。如果没有,请退房
numpy.memmap.resize
,你应该能够创建它。
哦,还有其他解决方案,例如PyTables
祝你好运!