保存多个不同长度的数组
我有大约8000个二维点的数组,这些数组存储在内存中,形式是一个包含numpy数组的Python列表。每个数组的形状是(x,2)
,其中x
的值在600到4000之间。简单来说,我有一个不规则的三维数组。
我想把这些数据以方便和快速的方式存储到磁盘上。我不想创建大约8000个单独的文件,但我也不想为了填满一个(8000,4000,2)
的矩阵而在里面填充很多零,如果可以避免的话。
我应该如何在磁盘上存储我的数据,以便尽量减少文件大小和解析/序列化的时间呢?
2 个回答
2
把你所有的numpy数组放到一个Python列表里,然后用pickle或者cPickle来处理这个列表。
举个例子:
import cPickle
from numpy import array, ones
a = array((5,2))
b = ones((10,2))
c = array((20,2))
all = [a,b,c]
cPickle.dump(all, open('all_my_arrays', 'w'))
然后你可以用下面的方式来取出它们:
all2 = cPickle.load(open('all_my_arrays'))
需要注意的是,这个列表all
并不需要占用大量的新内存。因为all
只是指向你的numpy数组的指针列表,所以不需要填充零或者进行其他的复制。
相对于pickle,HDF5在处理大数组时速度更快,并且可以在不同的应用程序之间使用(比如octave、perl等)。另一方面,pickle
的优点是不用额外安装软件(它已经包含在Python里),而且它可以直接理解Python对象。