首頁 > 軟體

python中h5py開源庫的使用樣例詳解

2022-05-18 19:01:34

一、h5py模組介紹

本文只是簡單的對h5py庫的基本建立檔案,資料集和讀取資料的方式進行介紹!如果讀者需要進一步詳細的學習h5py的更多知識,請參考h5py的官方檔案

h5py簡單介紹

一個HDF5檔案是一種存放兩類物件的容器:dataset和group. Dataset是類似於陣列的資料集,而group是類似資料夾一樣的容器,它好比python中的字典,有鍵(key)和值(value),存放dataset和其他group。在使用h5py的時候需要牢記一句話:groups類比字典dataset類比Numpy中的陣列

HDF5的dataset雖然與Numpy的陣列在介面上很相近,但是支援更多對外透明的儲存特徵,如:資料壓縮誤差檢測分塊傳輸

二、h5py模組使用

h5py建立的檔案字尾名為:.hdf5

1、h5py介面簡單介紹

h5py模組的使用主要分成兩步走:

  • 1)建立.hdf5型別檔案控制程式碼(建立一個物件) # 讀取檔案把“w”改成“r”

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

  • 2)建立資料(dataset)或組(group)

建立資料(dataset):

f.create_dataset(self, name, shape=None, dtype=None, data=None, **kwds)

建立組(group):

create_group(self, name, track_order=False)

2、h5py的使用樣例

  • 建立一個h5py檔案
import h5py
#要是讀取檔案的話,就把w換成r
f=h5py.File("myh5py.hdf5","w")

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

  • 建立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,)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

這裡我們僅僅建立了一個存放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
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
/dset2
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 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
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

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

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
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
/dset2
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
/dset3
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
3. 建立group組
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
[0 1 2 3 4 5 6 7 8 9]
/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
.............
[]
[]

Reference:

1、blog.csdn.net/csdn1569884…

2、blog.csdn.net/yudf2010/ar…

到此這篇關於python中h5py開源庫的使用的文章就介紹到這了,更多相關python h5py開源庫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com