我正在使用h5py来使用python
存储数据import h5py
def store(eigenvalues,eigenvectors,name='01_'):
datafile = h5py.File(name+'data.h5', 'w')
datafile['eigenvalues'] = eigenvalues
datafile['eigenvectors'] = (eigenvectors)
datafile.close()
print "Successfully saved eigenvalues and eigenvectors"
存储这些大数字非常有用 但是当试图存储只说两列数据时,我发现保存它正常的数据文件更节省空间。 是否存在关键数据大小,高于该大小,h5py格式存储将更有效? 使用这种格式还有其他不明显的优势吗?
答案 0 :(得分:1)
使用HDF5有很多优点。正如@EnricoGiampieri所说,它通常用于存储大型数据集,而不仅仅是单个数组。它对于同时存储所有关联的元数据也很有用。 来自HDF5 website
HDF5技术套件包括:
- 一种多功能数据模型,可以表示非常复杂的数据对象和各种元数据。
- 一种完全可移植的文件格式,对集合中数据对象的数量或大小没有限制。
- 一系列计算平台上运行的软件库,从笔记本电脑到大规模并行系统和工具 带有C,C ++,Fortran 90和Java接口的高级API。
- 丰富的集成性能功能,可实现访问时间和存储空间优化。
- 用于管理,操作,查看和分析集合中数据的工具和应用程序。
它是一种自我描述的分层数据格式 - 这意味着文件中的数据集很容易被发现。它可以扩展到非常大的文件大小和大规模并行I / O.
关于压缩,这是单个数据集的属性,需要在创建该数据集时指定。使用什么压缩算法有几种不同的选项 - 支持GZIP,SZIP和LZF。有关h5py wiki的更多信息。
要对您的文件应用压缩,请尝试以下操作:
import h5py
def store(eigenvalues,eigenvectors,name='01_'):
datafile = h5py.File(name+'data.h5', 'w')
eigenvalues_dset = datafile.create_dataset('eigenvalues', eigenvalues.shape, eigenvalues.dtype, compression='gzip', compression_opts=4)
eigenvectors_dset = datafile.create_dataset('eigenvectors', eigenvalues.shape, eigenvectors.dtype, compression='gzip', compression_opts=4)
datafile['eigenvalues'][:] = eigenvalues
datafile['eigenvectors'][:] = (eigenvectors)
datafile.close()
print "Successfully saved eigenvalues and eigenvectors"
这里我假设eigenvalues
和eigenvectors
都是numpy数组。如果不是,则应该转换它们(只需使用numpy.array(eigenvalues)
)。另请注意,要分配数据集,我使用了[:]
- 这是因为datafile['eigenvalues']
是HDF5对象,而datafile['eigenvalues'][:]
是该对象中的实际数据。 HDF5对象不仅包含数据,还包含属性和元数据。