2013-03-16 61 views
0

我使用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格式存儲將更有效? 也有使用這種格式的任何其他不明顯的優勢?

+0

我不是h5py庫的專家,但應該有一種壓縮方法來存儲HDF5格式的數據。你可以試試。沒有壓縮的大小開銷可能是由於文件格式保持的成癮性信息。 HDF5不被認爲只存儲一個陣列,而是來自多個觀測的複雜數據庫。 – EnricoGiampieri 2013-03-16 12:11:24

回答

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對象不僅包含數據,還包含屬性和元數據。

相關問題