h5檔案初識

2021-10-07 08:04:29 字數 1791 閱讀 5967

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...