我有一个 Python 代码,其输出是一个大小矩阵,其条目都是float
. 如果我使用扩展名保存它,.dat
则文件大小约为 500 MB。我读到 usingh5py
大大减少了文件大小。所以,假设我有一个名为A
. 如何将其保存到 h5py 文件中?另外,我如何读取同一个文件并将其作为 numpy 数组放在不同的代码中,因为我需要对数组进行操作?
问问题
124022 次
2 回答
140
h5py 提供了数据集和组的模型。前者基本上是数组,而后者您可以将其视为目录。每个都被命名。您应该查看 API 和示例的文档:
http://docs.h5py.org/en/latest/quick.html
一个简单的示例,您预先创建所有数据并且只想将其保存到 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
等:
于 2014-01-05T20:27:49.590 回答
121
一种处理文件打开/关闭并避免内存泄漏的更简洁方法:
准备:
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'][:]
于 2017-01-26T20:47:26.120 回答