網站首頁 編程語言 正文
本文只是簡單的對h5py庫的基本創建文件,數據集和讀取數據的方式進行介紹,作者剛接觸h5py,完全靠看文檔自學,如果哪里說的不對,歡迎糾正!如果讀者需要進一步詳細的學習h5py的更多知識,請參考h5py的官方文檔。
h5py簡單介紹
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,)
[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
.............
原文鏈接:https://blog.csdn.net/csdn15698845876/article/details/73278120
相關推薦
- 2022-08-30 如何解決React?useEffect鉤子帶來的無限循環問題_React
- 2022-06-22 Android實現歡迎滑動頁面_Android
- 2022-04-12 python入門之scrapy框架中Request對象和Response對象的介紹_python
- 2022-05-24 Flutter滾動組件之ListView使用方法詳解_Android
- 2023-11-22 Linux在Ubuntu Linux下如何壓縮一個文件夾/文件
- 2022-07-07 Python?pluggy框架使用示例代碼_python
- 2022-05-11 C++程序代碼優化的方法實例大全_C 語言
- 2022-05-11 python列表推導式的原理及使用方法_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支