h5py在存储数据时何时有用?
我正在用Python的h5py库来存储数据。
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格式存储会更有效率?另外,使用这种格式还有其他不明显的好处吗?
1 个回答
1
使用HDF5有很多好处。正如@EnricoGiampieri所说,它通常用于存储大量的数据集合,而不仅仅是单个数组。同时,它也很适合同时存储所有相关的元数据。
根据HDF5官网的信息,HDF5技术套件包括:
HDF5技术套件包括:
- 一个灵活的数据模型,可以表示非常复杂的数据对象和各种各样的元数据。
- 一个完全可移植的文件格式,没有数据对象数量或大小的限制。
- 一个可以在多种计算平台上运行的软件库,从笔记本电脑到大型并行系统,并提供C、C++、Fortran 90和Java接口的高级API。
- 一套丰富的集成功能,能够优化访问时间和存储空间。
- 用于管理、操作、查看和分析数据的工具和应用程序。
它是一种层次化的数据格式,具有自描述性——这意味着文件中的数据集很容易被发现。它可以扩展到非常大的文件大小和大规模的并行输入输出。
关于压缩,这是每个数据集的一个特性,需要在创建数据集时指定。可以选择几种不同的压缩算法——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对象不仅包含数据,还包含属性和元数据。