Numpy savez/加载数千个阵列,但不是一步到位

2024-10-01 17:22:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在一个序列化的未压缩文件(大约6gb的数据)中存储大约4000个numpy数组(每个1.5mb)。下面是两个小阵列的示例:

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


Tags: 数据importnumpy示例序列化loadmb数组
2条回答

当前numpy中的savez只是使用numpy.save将数组写入临时文件,然后将它们添加到zip文件(压缩或不压缩)。在

如果不使用压缩,那么可以跳过第2步,一个接一个地保存阵列,并将4000个阵列全部保存在一个文件夹中。在

我不认为你可以这样做np.savez公司. 然而,这是hdf5的完美用例。请参见:

http://www.h5py.org

或者

http://www.pytables.org

例如,如何在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文件中预先分配空间,然后稍后填充等等

相关问题 更多 >

    热门问题