HDF(Hiearchical Data Format)是一種針對大量數據進行組織和存儲的文件格式,可以存儲不同類型的圖像和數碼數據的文件格式,並且可以在不同類型的機器上傳輸。
HDF是美國國家高級計算應用中心(National Center for Supercomputing Application,NCSA)為了滿足各種領域研究需求而研制的一種能高效存儲和分發科學數據的新型數據格式。它的通用性比較強,許多數據類型都可以被嵌入在一個HDF文件里。例如符號、數字和圖形數據可以同時存儲在一個HDF文件里。HDF還是跨平台的,是一種與平台無關的文件格式,無需任何轉換就可以在不同平台上使用。
從20世紀八十年代起,NCSA陸續推出了HDF1~HDF4版本,HDF5發布於1998年,相比HDF4,HDF5具有以下改進:
- 被設計為一種新的格式用來改進HDF4.x,特別是每個文件可以存儲更大的文件和更多的對象。
- 數據模式更簡潔、更全面,它包含兩個基本結構:多維數組記錄結構,和分組結構。
- 更簡潔、更利於工程庫和應用編程接口,支持並行I/O,線程和其他一些現代系統和應用要求。
HDF5 是一種層次化的格式(hierarchical format),經常用於存儲復雜的科學數據。例如 MATLAB 就是用這個格式來存儲數據。在存儲帶有關聯的元數據(metadata)的復雜層次化數據的時候,這個格式非常有用,例如計算機模擬實驗的運算結果等,並且在技術上提供了豐富的接口,包含C,C++,Fortran, Python, Java等,能夠在不同的語言間完美兼容。
HDF5在Python中的工具包是h5py,創建一個HDF5文件:
# -*- coding: utf-8 -*-
import h5py # 導入工具包
import numpy as np
# HDF5的寫入:
imgData = np.zeros((30, 3))
with h5py.File('HDF5_FILE.h5', 'w') as f:
f['data'] = imgData # 將數據寫入文件的主鍵data下面
f['labels'] = range(100) # 將數據寫入文件的主鍵labels下面
# f.close() # 關閉文件
print '*.h5 Created.
或者:
# -*- coding: utf-8 -*-
import h5py # 導入工具包
import numpy as np
# HDF5的寫入:
imgData = np.zeros((30, 3))
with h5py.File('HDF5_FILE.h5', 'w') as f:
f.create_dataset('data', data=imgData)
f.create_dataset('labels', data=range(100))
# f.close() # 關閉文件
print '*.h5 Created.'
讀取.h5文件內容:
# -*- coding: utf-8 -*-
import h5py # 導入工具包
import numpy as np
# HDF5的讀取:
with h5py.File('HDF5_FILE.h5', 'r') as f:
for item in f.keys():
print 'main key is: {}'.format(item)
content = f[item][:]
print 'key value of {0} is: {1}'.format(item,content)
# f.close()