H5文件簡介和使用

H5文件是層次數據格式第5代的版本(Hierarchical Data Format,HDF5),它是用於存儲科學數據的一種文件格式和庫文件。接觸到這個文件格式也是因爲上Coursera深度學習課程的時候,作業用到了。它是由美國超級計算與應用中心研發的文件格式,用以存儲和組織大規模數據。目前由非營利組織HDF小組提供支持。

目前,很多商業和非商業組織都支持這種文件格式,如Java,MATLAB,Python,R等。

官網網站:https://www.hdfgroup.org/

H5文件在內存佔用、壓縮、訪問速度方面都有非常優秀的特性,在工業領域和科學領域都有很多運用。

H5將文件結構簡化成兩個主要的對象類型:
1、數據集,就是同一類型數據的多維數組。
2、組,是一種容器結構,可以包含數據集和其他組。

這導致了H5文件是一種真正的層次結構、文件系統式的數據類型。實際上,HDF5文件內部的資源是通過類似POSIX的語法進行訪問的(/path/to/resource)。元數據是由用戶定義的,以命名屬性的形式附加到組和數據集中。更復雜的存儲形式如圖像和表格可以使用數據集、組和屬性來構建。

除了文件格式的先進性,HDF5還包括了一個提升的類型系統,和數據空間對象,用以表示數據區域的選擇。API也是關於數據集、組、屬性、類型等的面向對象的形式。

由於使用B-tree來索引表格對象,H5非常適合時間序列的數據,如股票價格序列、網絡監測序列數據和3D氣象數據(中國國家衛星氣象中心發佈了一個文件HDF5.0使用簡介應該也是用了這個數據格式)。

H5本身用C程序提供庫函數來提供外部訪問的接口。在Python中,主要使用h5py模塊來操作相關格式。其讀取的函數如下:

def load_data():
    train_dataset = h5py.File('datasets/train_catvnoncat.h5', "r")
    train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # your train set features
    train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels

    test_dataset = h5py.File('datasets/test_catvnoncat.h5', "r")
    test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set features
    test_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labels

    classes = np.array(test_dataset["list_classes"][:]) # the list of classes
    
    train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))
    test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0]))
    
    return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes

train_dataset, train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes = load_dataset()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章