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
绝对检查文档:
写入hdf5文件取决于h5py或pytables(每个都有一个不同的python API,位于hdf5文件规范之上)。 你还应该看看其他简单的本地numpy提供的二进制格式,如np.save
, np.savez
等:
处理文件打开/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'][:]