hdf5檔案格式使用記錄
- 引言
- hdf5檔案結構
- python中使用h5py使用hdf5檔案
- 參考鏈接
引言
最近,在使用gprMax進行仿真時發現gprMax在進行創建目標的可以從hdf5檔案匯入物件,而且我發現其實gpeMax的out其實也是hdf5檔案格式,但是我竟然不知道hdf5檔案是啥東西,有必要系統的了解一下,
hdf5檔案結構
HDF5 檔案一般以 .h5 或者 .hdf5 作為后綴名,需要專門的軟體才能打開預覽檔案的內容,HDF5 檔案結構中有 2 primary objects: Groups 和 Datasets,
Groups 就類似于檔案夾,每個 HDF5 檔案其實就是根目錄 (root) group’/’,
Datasets 類似于 NumPy 中的陣列 array ,
+-- /
| +-- group_1
| | +-- dataset_1_1
| | | +-- attribute_1_1_1
| | | +-- attribute_1_1_2
| | | +-- ...
| | |
| | +-- dataset_1_2
| | | +-- attribute_1_2_1
| | | +-- attribute_1_2_2
| | | +-- ...
|
整個hdf5檔案如上圖所示,可以看到group類似我們所熟知的檔案夾,dataset就類似于一個numpy中的的array,
每個 dataset 可以分成兩部分: 原始資料 (raw) data values 和 元資料 metadata (a set of data that describes and gives information about other data => raw data),
+-- Dataset
| +-- (Raw) Data Values (eg: a 4 x 5 x 6 matrix)
| +-- Metadata
| | +-- Dataspace (eg: Rank = 3, Dimensions = {4, 5, 6})
| | +-- Datatype (eg: Integer)
| | +-- Properties (eg: Chuncked, Compressed)
| | +-- Attributes (eg: attr1 = 32.4, attr2 = "hello", ...)
|
從上面的結構中可以看出:
Dataspace 給出原始資料的秩 (Rank) 和維度 (dimension)
Datatype 給出資料型別
Properties 說明該 dataset 的分塊儲存以及壓縮情況
Attributes 為該 dataset 的其他自定義屬性
python中使用h5py使用hdf5檔案
首先安裝h5py包,使用 pip install h5py
1.創建一個hdf5檔案
#創建一個測驗的hdf5檔案
import h5py
import numpy as np
f = h5py.File("h5py_exaple.hdf5",'w')
#在該檔案下建立一個group
g1 = f.create_group("gro1")
#在g1 group 下建立一個dataset
g1.create_dataset("data1",np.arange(10),np.int16))
g1.reate_dataset("d2",np.arange(10),np.int16))
g1.reate_dataset("d3",np.arange(10),np.int16))
print([key for key in g1.keys()])
#output: ['d2', 'd3', 'data1']
f.close()
2.讀hdf5檔案
import numpy as np
import h5py
f = h5py.File("h5py_exaple.hdf5","r")
print(f.filename)
#output: h5py_exaple.hdf5
print([key for key in f.keys()])
#output: ['gro1']
print([key for key in f['gro1'].keys()])
#output: ['d2', 'd3', 'data1']
3.追加內容
import numpy as np
import h5py
f = h5py.File("h5py_exaple.hdf5","a")
f.create_group('gro2')
print([key for key in f.keys()])
#output: ['gro1','gro2']
4.洗掉hdf5檔案中的某一個資料集(必須以’w’或者’a’模式打開)
import h5py
with h5py.File("h5py_exaple.hdf5","a") as f:
del f['gro1/data1']
print([key for key in f['gro1'].keys()])
#output ['d2','d3']
參考鏈接
https://zhuanlan.zhihu.com/p/104145585
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/197671.html
標籤:其他
上一篇:2020.10.28日培訓練習一
