我想在序列化的未压缩文件(大约6 GB的数据)中存储大约4000个numpy数组(每个1.5 MB)。这是一个包含2个小数组的例子:
import numpy
d1 = { 'array1' : numpy.array([1,2,3,4]), 'array2': numpy.array([5,4,3,2]) }
numpy.savez('myarrays', **d1)
d2 = numpy.load('myarrays.npz')
for k in d2:
print d2[k]
它有效,但我想做同样的事情不是一步:
保存时,我希望能够保存10个数组,然后执行其他任务(可能会使用几秒钟),然后编写100个其他数组,然后执行其他操作,然后编写其他50个数组等等。
加载时: idem ,我希望能够加载一些数组,然后执行其他任务,然后继续加载。
如何处理此numpy.savez
/ numpy.load
?
答案 0 :(得分:7)
我认为你不能用np.savez做到这一点。然而,这是hdf5的完美用例。见:
或
作为如何在h5py中执行此操作的示例:
h5f = h5py.File('test.h5', 'w')
h5f.create_dataset('array1', data=np.array([1,2,3,4]))
h5f.create_dataset('array2', data=np.array([5,4,3,2]))
h5f.close()
# Now open it back up and read data
h5f = h5py.File('test.h5', 'r')
a = h5f['array1'][:]
b = h5f['array2'][:]
h5f.close()
print a
print b
# [1 2 3 4]
# [5 4 3 2]
当然还有更复杂的方法,通过组合组织数组,添加元数据,在hdf5文件中预先分配空间,然后再填充等等。
答案 1 :(得分:1)
savez
只是将数组写入numpy.save
的临时文件,然后将它们添加到zip文件(带或不带压缩)。
如果你没有使用压缩,你也可以跳过第2步,只是逐个保存数组,并将所有4000个保存在一个文件夹中。