何时h5py对存储数据有用?

时间:2013-03-16 08:06:35

标签: python h5py

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

1 个答案:

答案 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"

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