创建真正大的Python列表
我正在尝试创建与cPickle兼容的图像数据库。初始列表为空。目录中每个图像的数据将作为新行添加到列表中。图像为224x224。图像的大小平均为8KB。加载大约10000张图像后,我的电脑挂起。没有鼠标移动。什么也没发生。需要重新启动。下面是执行此操作的代码段创建真正大的Python列表,python,arrays,list,numpy,crash,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=Imag
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数组。。是否有解决此问题的方法???如果数据最终将是numpy数组,请尝试使用。它的工作原理与“普通”numpy数组类似,区别在于数据实际上是以二进制形式存储在磁盘上的。只有请求的数组块被放入RAM中,这样就可以解决您的问题 如果确定了数据数组的大小,则在创建
memmap
对象时只需设置正确的维度。如果没有,请退房
,您应该能够以任何方式创建它
哦,还有其他解决方案,如PyTables
祝你好运 如果数据最终将是numpy数组,可以尝试使用。它的工作原理与“普通”numpy数组类似,区别在于数据实际上是以二进制形式存储在磁盘上的。只有请求的数组块被放入RAM中,这样就可以解决您的问题 如果确定了数据数组的大小,则在创建
memmap
对象时只需设置正确的维度。如果没有,请退房
,您应该能够以任何方式创建它
哦,还有其他解决方案,如PyTables
祝你好运 您能否创建一个生成器,为每个图像生成标签和像素的元组。这样您就不必一次在内存中创建所有数据了?我无法复制您的问题,因为我没有安装PIL。但我认为问题在于JPG是一种压缩格式,您正在尝试存储未压缩的格式,每幅图像的大小将远大于8K。我不喜欢像我这样的答案,但一般来说,您应该避免将所有内容都保存在内存中。使用生成器/打开和关闭循环中的文件,而不是一次完成。您始终可以放弃构建自己的数据库格式,使用标准库中的搁置@maxymoo您是说使用其他格式不会导致此问题?我试着只加载这些图像,而不向列表中添加数据。它没有坠毁。。我怀疑这是列表的一个问题。您是否可以创建一个生成器,为每个图像生成标签和像素的元组。这样您就不必一次在内存中创建所有数据了?我无法复制您的问题,因为我没有安装PIL。但我认为问题在于JPG是一种压缩格式,您正在尝试存储未压缩的格式,每幅图像的大小将远大于8K。我不喜欢像我这样的答案,但一般来说,您应该避免将所有内容都保存在内存中。使用生成器/打开和关闭循环中的文件,而不是一次完成。您始终可以放弃构建自己的数据库格式,使用标准库中的搁置@maxymoo您是说使用其他格式不会导致此问题?我试着只加载这些图像,而不向列表中添加数据。它没有坠毁。。我怀疑这是列表的一个问题。您是否可以创建一个生成器,为每个图像生成标签和像素的元组。这样您就不必一次在内存中创建所有数据了?我无法复制您的问题,因为我没有安装PIL。但我认为问题在于JPG是一种压缩格式,您正在尝试存储未压缩的格式,每幅图像的大小将远大于8K。我不喜欢像我这样的答案,但一般来说,您应该避免将所有内容都保存在内存中。使用生成器/打开和关闭循环中的文件,而不是一次完成。您始终可以放弃构建自己的数据库格式,使用标准库中的搁置@maxymoo您是说使用其他格式不会导致此问题?我试着只加载这些图像,而不向列表中添加数据。它没有坠毁。。我怀疑这是列表的问题