網(wǎng)站首頁 編程語言 正文
一、h5py模塊介紹
本文只是簡單的對h5py庫的基本創(chuàng)建文件,數(shù)據(jù)集和讀取數(shù)據(jù)的方式進(jìn)行介紹!如果讀者需要進(jìn)一步詳細(xì)的學(xué)習(xí)h5py的更多知識,請參考h5py的官方文檔。
h5py簡單介紹
一個(gè)HDF5文件是一種存放兩類對象的容器:dataset和group. Dataset是類似于數(shù)組的數(shù)據(jù)集,而group是類似文件夾一樣的容器,它好比python中的字典,有鍵(key)和值(value),存放dataset和其他group。在使用h5py的時(shí)候需要牢記一句話:
groups類比字典
,dataset類比Numpy中的數(shù)組
。
HDF5的dataset雖然與Numpy的數(shù)組在接口上很相近,但是支持更多對外透明的
存儲特征
,如:數(shù)據(jù)壓縮
,誤差檢測
,分塊傳輸
。
二、h5py模塊使用
h5py創(chuàng)建的文件后綴名為:
.hdf5
1、h5py接口簡單介紹
h5py模塊的使用主要分成兩步走:
- 1)創(chuàng)建
.hdf5
類型文件句柄(創(chuàng)建一個(gè)對象) # 讀取文件把“w”改成“r”
f=h5py.File("myh5py.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、h5py的使用樣例
- 創(chuàng)建一個(gè)h5py文件
import h5py #要是讀取文件的話,就把w換成r f=h5py.File("myh5py.hdf5","w")
在當(dāng)前目錄下會生成一個(gè)myh5py.hdf5文件
- 創(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ù)集,并沒有賦值,默認(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)建的方式混合寫下。看下面的代碼
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)文件夾的感覺!繼續(xù)看下面的代碼,你會對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 ............. [] []
Reference:
1、blog.csdn.net/csdn1569884…
2、blog.csdn.net/yudf2010/ar…
原文鏈接:https://juejin.cn/post/7095558678891200520
相關(guān)推薦
- 2022-04-12 npm ERR! missing script: dev
- 2022-01-21 如何保證Redis緩存與數(shù)據(jù)庫的一致性?
- 2022-05-22 Docker容器之間數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)_docker
- 2022-10-20 詳解Go?語言如何通過測試保證質(zhì)量_Golang
- 2022-07-26 論網(wǎng)頁檢查preview和response一個(gè)是漢字一個(gè)是亂碼怎么解決
- 2022-07-13 查看工具設(shè)置的編碼 sys.getdefaultencoding()
- 2023-03-20 pip安裝python庫時(shí)報(bào)Failed?building?wheel?for?xxx錯誤的解決方法
- 2022-03-07 golang強(qiáng)制類型轉(zhuǎn)換和類型斷言_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支