python庫 h5py入門講解

2021-08-20 05:40:05 字數 4311 閱讀 3129

h5py檔案是存放兩類物件的容器,資料集(dataset)和組(group),dataset類似陣列類的資料集合,和numpy的陣列差不多。group是像資料夾一樣的容器,它好比python中的字典,有鍵(key)和值(value)。group中可以存放dataset或者其他的group。」鍵」就是組成員的名稱,」值」就是組成員物件本身(組或者資料集),下面來看下如何建立組和資料集。

1. 建立乙個h5py檔案

import h5py

#要是讀取檔案的話,就把w換成r

f=h5py.file("myh5py.hdf5","w")

在當前目錄下會生成乙個myh5py.hdf5檔案

2. 建立dataset資料集

import h5py

f=h5py.file("myh5py.hdf5","w")

#deset1是資料集的name,(20,)代表資料集的shape,i代表的是資料集的元素型別

d1=f.create_dataset("dset1", (20,), 'i')

for key in f.keys():

print(key)

print(f[key].name)

print(f[key].shape)

print(f[key].value)

輸出:dset1

/dset1

(20,)[00

0000

0000

0000

0000

00]

這裡我們僅僅建立了乙個存放20個整型元素的資料集,並沒有賦值,預設全是0,如何賦值呢,看下面的**。

import h5py

import numpy as np

f=h5py.file("myh5py.hdf5","w")

d1=f.create_dataset("dset1",(20,),'i')

#賦值d1[...]=np.arange(20)

#或者我們可以直接按照下面的方式建立資料集並賦值

f["dset2"]=np.arange(15)

for key in f.keys():

print(f[key].name)

print(f[key].value)

輸出:/dset1

[ 0123

4567

891011

1213

1415

1617

1819]

/dset2

[ 0123

4567

891011

1213

14]

如果我們有現成的numpy陣列,那麼可以在建立資料集的時候就賦值,這個時候就不必指定資料的型別和形狀了,只需要把陣列名傳給引數data。

import h5py

import numpy as np

f=h5py.file("myh5py.hdf5","w")

a=np.arange(20)

d1=f.create_dataset("dset1",data=a)

for key in f.keys():

print(f[key].name)

print(f[key].value)

輸出:/dset1

[ 0123

4567

891011

1213

1415

1617

1819]

現在把這幾種建立的方式混合寫下。看下面的**

import h5py

import numpy as np

f=h5py.file("myh5py.hdf5","w")

#分別建立dset1,dset2,dset3這三個資料集

a=np.arange(20)

d1=f.create_dataset("dset1",data=a)

d2=f.create_dataset("dset2",(3,4),'i')

d2[...]=np.arange(12).reshape((3,4))

f["dset3"]=np.arange(15)

for key in f.keys():

print(f[key].name)

print(f[key].value)

輸出:/dset1

[ 0123

4567

891011

1213

1415

1617

1819]

/dset2

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

/dset3

[ 0123

4567

8910

import h5py

import numpy as np

f=h5py.file("myh5py.hdf5","w")

#建立乙個名字為bar的組

g1=f.create_group("bar")

#在bar這個組裡面分別建立name為dset1,dset2的資料集並賦值。

g1["dset1"]=np.arange(10)

g1["dset2"]=np.arange(12).reshape((3,4))

for key in g1.keys():

print(g1[key].name)

print(g1[key].value)

輸出:/bar/dset1[01

2345

6789]

/bar/dset2

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

注意觀察資料集dset1和dset2的名字是不是有點和前面的不一樣,如果是直接建立的資料集,不在任何組裡面,那麼它的名字就是/+名字,現在這兩個資料集都在bar這個group(組)裡面,名字就變成了/bar+/名字,是不是有點資料夾的感覺!繼續看下面的**,你會對group和dataset的關係進一步了解。

import h5py

import numpy as np

f=h5py.file("myh5py.hdf5","w")

#建立組bar1,組bar2,資料集dset

g1=f.create_group("bar1")

g2=f.create_group("bar2")

d=f.create_dataset("dset",data=np.arange(10))

#在bar1組裡面建立乙個組car1和乙個資料集dset1。

c1=g1.create_group("car1")

d1=g1.create_dataset("dset1",data=np.arange(10))

#在bar2組裡面建立乙個組car2和乙個資料集dset2

c2=g2.create_group("car2")

d2=g2.create_dataset("dset2",data=np.arange(10))

#根目錄下的組和資料集

print(".............")

for key in f.keys():

print(f[key].name)

#bar1這個組下面的組和資料集

print(".............")

for key in g1.keys():

print(g1[key].name)

#bar2這個組下面的組和資料集

print(".............")

for key in g2.keys():

print(g2[key].name)

#順便看下car1組和car2組下面都有什麼,估計你都猜到了為空。

print(".............")

print(c1.keys())

print(c2.keys())

輸出:.............

/bar1

/bar2

/dset

.............

/bar1/car1

/bar1/dset1

.............

/bar2/car2

/bar2/dset2

.............

python庫 h5py入門講解

h5py檔案是存放兩類物件的容器,資料集 dataset 和組 group dataset類似陣列類的資料集合,和numpy的陣列差不多。group是像資料夾一樣的容器,它好比python中的字典,有鍵 key 和值 value group中可以存放dataset或者其他的group。鍵 就是組成員...

python中利用h5py模組讀取h5檔案中的主鍵

import h5py import numpy as np hdf5的寫入 imgdata np.zeros 2,4 f h5py.file hdf5 file.h5 w 建立乙個h5檔案,檔案指標是f f data imgdata 將資料寫入檔案的主鍵data下面 f labels np.arr...

h5py 必知 String儲存

1.h5py 檔案介紹 乙個h5py檔案是 dataset 和 group 二合一的容器。1.dataset 類似陣列組織的資料的集合,像 numpy 陣列一樣工作 2.group 包含了其它 dataset 和 其它 group 像字典一樣工作 看下圖 通過上圖,我們可以知道 h5py 檔案就像是...