python庫(kù)h5py入門詳解
本文只是簡(jiǎn)單的對(duì)h5py庫(kù)的基本創(chuàng)建文件,數(shù)據(jù)集和讀取數(shù)據(jù)的方式進(jìn)行介紹,作者剛接觸h5py,完全靠看文檔自學(xué),如果哪里說(shuō)的不對(duì),歡迎糾正!如果讀者需要進(jìn)一步詳細(xì)的學(xué)習(xí)h5py的更多知識(shí),請(qǐng)參考h5py的官方文檔。
h5py簡(jiǎn)單介紹
h5py文件是存放兩類對(duì)象的容器,數(shù)據(jù)集(dataset)和組(group),dataset類似數(shù)組類的數(shù)據(jù)集合,和numpy的數(shù)組差不多。group是像文件夾一樣的容器,它好比python中的字典,有鍵(key)和值(value)。group中可以存放dataset或者其他的group。”鍵”就是組成員的名稱,”值”就是組成員對(duì)象本身(組或者數(shù)據(jù)集),下面來(lái)看下如何創(chuàng)建組和數(shù)據(jù)集。
1. 創(chuàng)建一個(gè)h5py文件
import h5py #要是讀取文件的話,就把w換成r f=h5py.File("myh5py.hdf5","w")
在當(dāng)前目錄下會(huì)生成一個(gè)myh5py.hdf5文件
2. 創(chuàng)建dataset數(shù)據(jù)集
import h5py f=h5py.File("myh5py.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)建了一個(gè)存放20個(gè)整型元素的數(shù)據(jù)集,并沒(méi)有賦值,默認(rèn)全是0,如何賦值呢,看下面的代碼。
import h5py import numpy as np f=h5py.File("myh5py.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í)候就賦值,這個(gè)時(shí)候就不必指定數(shù)據(jù)的類型和形狀了,只需要把數(shù)組名傳給參數(shù)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]
現(xiàn)在把這幾種創(chuàng)建的方式混合寫下??聪旅娴拇a
import h5py import numpy as np f=h5py.File("myh5py.hdf5","w") #分別創(chuàng)建dset1,dset2,dset3這三個(gè)數(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 h5py import numpy as np f=h5py.File("myh5py.hdf5","w") #創(chuàng)建一個(gè)名字為bar的組 g1=f.create_group("bar") #在bar這個(gè)組里面分別創(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的名字是不是有點(diǎn)和前面的不一樣,如果是直接創(chuàng)建的數(shù)據(jù)集,不在任何組里面,那么它的名字就是/+名字,現(xiàn)在這兩個(gè)數(shù)據(jù)集都在bar這個(gè)group(組)里面,名字就變成了/bar+/名字,是不是有點(diǎn)文件夾的感覺(jué)!繼續(xù)看下面的代碼,你會(huì)對(duì)group和dataset的關(guān)系進(jìn)一步了解。
import h5py import numpy as np f=h5py.File("myh5py.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)建一個(gè)組car1和一個(gè)數(shù)據(jù)集dset1。 c1=g1.create_group("car1") d1=g1.create_dataset("dset1",data=np.arange(10)) #在bar2組里面創(chuàng)建一個(gè)組car2和一個(gè)數(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這個(gè)組下面的組和數(shù)據(jù)集 print(".............") for key in g1.keys(): ? ? print(g1[key].name) #bar2這個(gè)組下面的組和數(shù)據(jù)集 print(".............") for key in g2.keys(): ? ? print(g2[key].name) #順便看下car1組和car2組下面都有什么,估計(jì)你都猜到了為空。 print(".............") print(c1.keys()) print(c2.keys())
輸出:
.............
/bar1
/bar2
/dset
.............
/bar1/car1
/bar1/dset1
.............
/bar2/car2
/bar2/dset2
.............
到此這篇關(guān)于python庫(kù)h5py入門詳解的文章就介紹到這了,更多相關(guān)python h5py內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡(jiǎn)單的連接MySQL與Python的Bottle框架的方法
這篇文章主要介紹了簡(jiǎn)單的連接MySQL與Python的Bottle框架的方法,主要基于mysql-connector插件,需要的朋友可以參考下2015-04-04解決pytorch 損失函數(shù)中輸入輸出不匹配的問(wèn)題
這篇文章主要介紹了解決pytorch 損失函數(shù)中輸入輸出不匹配的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Python 實(shí)現(xiàn)字符串中指定位置插入一個(gè)字符
下面小編就為大家分享一篇Python 實(shí)現(xiàn)字符串中指定位置插入一個(gè)字符,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05python?replace?空格數(shù)據(jù)處理的實(shí)現(xiàn)
本文主要介紹了python?replace?空格數(shù)據(jù)處理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06python3實(shí)現(xiàn)SMTP發(fā)送郵件詳細(xì)教程
這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)SMTP發(fā)送郵件的詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06python3通過(guò)subprocess模塊調(diào)用腳本并和腳本交互的操作
這篇文章主要介紹了python3通過(guò)subprocess模塊調(diào)用腳本并和腳本交互的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12