input和输出numpy数组到h5py

我有一个Python代码,其输出是 在这里输入图像说明 大小的matrix,其条目都是float型。 如果我用扩展名.dat保存,文件大小为500 MB。 我读了使用h5py大大减less文件大小。 所以,假设我有一个名为A的二维numpy数组。 如何将其保存到h5py文件? 此外,如何读取相同的文件,并将其作为一个numpy数组在不同的代码中,因为我需要做数组操作?

h5py提供了数据集的模型。 前者基本上是数组,后者你可以认为是目录。 每个都被命名。 您应该查看API和示例的文档:

http://docs.h5py.org/en/latest/quick.html

一个简单的例子,你正在创build所有的数据,只是想保存到一个hdf5文件看起来像这样:

 In [1]: import numpy as np In [2]: import h5py In [3]: a = np.random.random(size=(100,20)) In [4]: h5f = h5py.File('data.h5', 'w') In [5]: h5f.create_dataset('dataset_1', data=a) Out[5]: <HDF5 dataset "dataset_1": shape (100, 20), type "<f8"> In [6]: h5f.close() 

然后,您可以使用以下方式加载该数据:'

 In [10]: h5f = h5py.File('data.h5','r') In [11]: b = h5f['dataset_1'][:] In [12]: h5f.close() In [13]: np.allclose(a,b) Out[13]: True 

绝对检查文档:

http://docs.h5py.org

写入hdf5文件取决于h5py或pytables(每个都有一个不同的python API,位于hdf5文件规范之上)。 你还应该看看其他简单的本地numpy提供的二进制格式,如np.savenp.savez等:

http://docs.scipy.org/doc/numpy/reference/routines.io.html

处理文件打开/closures和避免内存泄漏的更清洁的方式 :

准备:

 import numpy as np import h5py data_to_write = np.random.random(size=(100,20)) # or some such 

写:

 with h5py.File('name-of-file.h5', 'w') as hf: hf.create_dataset("name-of-dataset", data=data_to_write) 

读:

 with h5py.File('name-of-file.h5', 'r') as hf: data = hf['name-of-dataset'][:]