h5檔案中有兩個核心的概念:組「group」和資料集「dataset」。 乙個h5檔案就是 「dataset」 和 「group」 二合一的容器。
dataset :簡單來講類似陣列組織形式的資料集合,像 numpy 陣列一樣工作,乙個dataset即乙個numpy.ndarray(np.array只是乙個便捷的函式,用來建立乙個ndarray,它本身不是乙個類)。具體的dataset可以是影象、**,甚至是pdf檔案和excel。
group:包含了其它 dataset(陣列) 和 其它 group ,像字典一樣工作。
乙個h5檔案被像linux檔案系統一樣被組織起來:dataset是檔案,group是資料夾,它下面可以包含多個資料夾(group)和多個檔案(dataset)。形象來看h5資料組織方式大概像醬嬸兒的,諾!跟檔案系統一樣,大概知道它為啥叫層次資料格式了吧!
# reading h5 file
import h5py
with h5py.file(
'cat_dog.h5'
,"r"
)as f:
for key in f.keys():
#print(f[key], key, f[key].name, f[key].value) # 因為這裡有group物件它是沒有value屬性的,故會異常。另外字串讀出來是位元組流,需要解碼成字串。
print
(f[key]
, key, f[key]
.name)
# f[key] means a dataset or a group object. f[key].value visits dataset' value,except group object.
"""結果:
dogs /dogs
list_classes /list_classes
train_set_x /train_set_x
train_set_y /train_set_y
**解析:
檔案物件f它表示h5檔案的根目錄(root group),前面說了group是按字典的方式工作的,通過f.keys()來找到根目錄下的所有dataset和group的key,然後通過key
來訪問各個dataset或group物件。
結果解析:
1.我們可以發現這個h5檔案下有1個叫dogs的資料夾(group)和3個檔案(dataset)它們分別叫list_classes,train_set_x,train_set_y它們的shape都可知。
dogs group下有乙個成員但我們不知道它是group還是dataset。
2.我們可以發現key和name的區別:
上層group物件是通過key來訪問下層dataset或group的而不是通過name來訪問的;
因為name屬性它是dataset或group的絕對路徑並非是真正的"name",key才是真正的"name"。
name絕對路徑:比如下文中訪問name得到:/dogs/husky,它表示根目錄下有dogs這個掛載點,dogs下又掛載了husky。
"""
dogs_group = f[
"dogs"
]for key in dogs_group.keys():
print
(dogs_group[key]
, dogs_group[key]
.name)
"""結果:
/dogs/husky
可見dogs資料夾下有個key為husky的檔案dataset
"""
h5檔案簡介
h5檔案是層次格式的第5代版本,用於儲存科學資料的一種檔案格式和庫檔案,由美國超級計算中心與應用中心研發的檔案格式,用以儲存和組織大規模資料.h5將檔案結構簡化成兩個主要的物件型別 1 資料集dataset,就是同一型別資料的多維陣列 2 組group,是一種容器結構,可以包含資料集和其他組,若乙個...
生成H5檔案記錄
首先理解h5py這個東西,網上專業說明很多。這裡不贅述,個人理解 h5py是乙個大盒子,下面 是新建這個盒子 target path是h5檔案存放路徑 dataset h5py.file os.path join target path,data.h5 w 有了空盒子以後,我們給它再來進行分割槽。乙...
讀取h5檔案基本操作
import h5py f0 h5py.file users hupeiwen downloads modelnet40 ply hdf5 2048 ply data test0.h5 r 遍歷檔案中的一級組 forgroup in f0.keys print group 獲得其下面的dataset...