溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中h5py開源庫怎么使用

發(fā)布時間:2022-05-19 09:12:36 來源:億速云 閱讀:132 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹“python中h5py開源庫怎么使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“python中h5py開源庫怎么使用”文章能幫助大家解決問題。

一、h6py模塊介紹

h6py簡單介紹

一個HDF5文件是一種存放兩類對象的容器:dataset和group. Dataset是類似于數(shù)組的數(shù)據(jù)集,而group是類似文件夾一樣的容器,它好比python中的字典,有鍵(key)和值(value),存放dataset和其他group。在使用h6py的時候需要牢記一句話:groups類比字典,dataset類比Numpy中的數(shù)組。

HDF5的dataset雖然與Numpy的數(shù)組在接口上很相近,但是支持更多對外透明的存儲特征,如:數(shù)據(jù)壓縮誤差檢測,分塊傳輸。

二、h6py模塊使用

h6py創(chuàng)建的文件后綴名為:.hdf5

1、h6py接口簡單介紹

h6py模塊的使用主要分成兩步走:

  • 1)創(chuàng)建.hdf5類型文件句柄(創(chuàng)建一個對象) # 讀取文件把“w”改成“r”

f=h6py.File("myh6py.hdf5","w")

  • 2)創(chuàng)建數(shù)據(jù)(dataset)或組(group)

創(chuàng)建數(shù)據(jù)(dataset):

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

創(chuàng)建組(group):

create_group(self, name, track_order=False)

2、h6py的使用樣例

  • 創(chuàng)建一個h6py文件

import h6py
#要是讀取文件的話,就把w換成r
f=h6py.File("myh6py.hdf5","w")

在當前目錄下會生成一個myh6py.hdf5文件

  • 創(chuàng)建dataset數(shù)據(jù)集

import h6py
f=h6py.File("myh6py.hdf5","w")
#deset1是數(shù)據(jù)集的name,(20,)代表數(shù)據(jù)集的shape,i代表的是數(shù)據(jù)集的元素類型
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]

這里我們僅僅創(chuàng)建了一個存放20個整型元素的數(shù)據(jù)集,并沒有賦值,默認全是0,如何賦值呢,看下面的代碼。

import h6py
import numpy as np
f=h6py.File("myh6py.hdf5","w")
d1=f.create_dataset("dset1",(20,),'i')
#賦值
d1[...]=np.arange(20)
#或者我們可以直接按照下面的方式創(chuàng)建數(shù)據(jù)集并賦值
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]

如果我們有現(xiàn)成的numpy數(shù)組,那么可以在創(chuàng)建數(shù)據(jù)集的時候就賦值,這個時候就不必指定數(shù)據(jù)的類型和形狀了,只需要把數(shù)組名傳給參數(shù)data。

import h6py
import numpy as np
f=h6py.File("myh6py.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]

現(xiàn)在把這幾種創(chuàng)建的方式混合寫下??聪旅娴拇a

import h6py
import numpy as np
f=h6py.File("myh6py.hdf5","w")
#分別創(chuàng)建dset1,dset2,dset3這三個數(shù)據(jù)集
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. 創(chuàng)建group組
import h6py
import numpy as np
f=h6py.File("myh6py.hdf5","w")
#創(chuàng)建一個名字為bar的組
g1=f.create_group("bar")
#在bar這個組里面分別創(chuàng)建name為dset1,dset2的數(shù)據(jù)集并賦值。
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]]

注意觀察數(shù)據(jù)集dset1和dset2的名字是不是有點和前面的不一樣,如果是直接創(chuàng)建的數(shù)據(jù)集,不在任何組里面,那么它的名字就是/+名字,現(xiàn)在這兩個數(shù)據(jù)集都在bar這個group(組)里面,名字就變成了/bar+/名字,是不是有點文件夾的感覺!繼續(xù)看下面的代碼,你會對group和dataset的關系進一步了解。

import h6py
import numpy as np
f=h6py.File("myh6py.hdf5","w")
#創(chuàng)建組bar1,組bar2,數(shù)據(jù)集dset
g1=f.create_group("bar1")
g2=f.create_group("bar2")
d=f.create_dataset("dset",data=np.arange(10))
#在bar1組里面創(chuàng)建一個組car1和一個數(shù)據(jù)集dset1。
c1=g1.create_group("car1")
d1=g1.create_dataset("dset1",data=np.arange(10))
#在bar2組里面創(chuàng)建一個組car2和一個數(shù)據(jù)集dset2
c2=g2.create_group("car2")
d2=g2.create_dataset("dset2",data=np.arange(10))
#根目錄下的組和數(shù)據(jù)集
print(".............")
for key in f.keys():
    print(f[key].name)
#bar1這個組下面的組和數(shù)據(jù)集
print(".............")
for key in g1.keys():
    print(g1[key].name)

#bar2這個組下面的組和數(shù)據(jù)集
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開源庫怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI