h5py在存储数据时何时有用?

0 投票
1 回答
1224 浏览
提问于 2025-04-17 19:18

我正在用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"

在这里,我假设eigenvalueseigenvectors都是numpy数组。如果它们不是,你应该先转换一下(只需使用numpy.array(eigenvalues))。另外,请注意,在分配数据集时,我使用了[:]——这是因为datafile['eigenvalues']是一个HDF5对象,而datafile['eigenvalues'][:]是该对象中的实际数据。HDF5对象不仅包含数据,还包含属性和元数据。

撰写回答