使用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"
在這裏,我認爲eigenvalues
和eigenvectors
都是numpy的陣列。如果不是,請轉換它們(只需使用numpy.array(eigenvalues)
)。還要注意,要分配數據集,我已經使用了[:]
- 這是因爲datafile['eigenvalues']
是HDF5對象,而datafile['eigenvalues'][:]
是該對象中的實際數據。 HDF5對象不僅包含數據,還包含屬性和元數據。
我不是h5py庫的專家,但應該有一種壓縮方法來存儲HDF5格式的數據。你可以試試。沒有壓縮的大小開銷可能是由於文件格式保持的成癮性信息。 HDF5不被認爲只存儲一個陣列,而是來自多個觀測的複雜數據庫。 – EnricoGiampieri 2013-03-16 12:11:24