0

我正在使用 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 格式存储会更有效?使用这种格式还有其他不明显的优势吗?

4

1 回答 1

1

使用 HDF5 有很多优点。正如@EnricoGiampieri 所说,它通常用于存储大量数据,而不仅仅是单个数组。同时存储所有相关元数据也很有用。来自HDF5 网站

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"

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

于 2013-04-26T08:37:50.027 回答