Python中h5py模块用作什么的,如何使用
Admin 2022-08-24 群英技术资讯 295 次浏览
本文只是简单的对h5py库的基本创建文件,数据集和读取数据的方式进行介绍!如果读者需要进一步详细的学习h5py的更多知识,请参考h5py的官方文档。
h5py简单介绍
一个HDF5文件是一种存放两类对象的容器:dataset和group. Dataset是类似于数组的数据集,而group是类似文件夹一样的容器,它好比python中的字典,有键(key)和值(value),存放dataset和其他group。在使用h5py的时候需要牢记一句话:
groups类比字典
,dataset类比Numpy中的数组
。
HDF5的dataset虽然与Numpy的数组在接口上很相近,但是支持更多对外透明的
存储特征
,如:数据压缩
,误差检测
,分块传输
。
h5py创建的文件后缀名为:
.hdf5
h5py模块的使用主要分成两步走:
.hdf5
类型文件句柄(创建一个对象) # 读取文件把“w”改成“r”f=h5py.File("myh5py.hdf5","w")
创建数据(dataset):
f.create_dataset(self, name, shape=None, dtype=None, data=None, **kwds)
创建组(group):
create_group(self, name, track_order=False)
import h5py #要是读取文件的话,就把w换成r f=h5py.File("myh5py.hdf5","w")
在当前目录下会生成一个myh5py.hdf5文件
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…
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
tkinter 是 Python 的自带的GUI库,这篇文章就主要和大家分享tkinter模块的使用,本文实例具有一定的借鉴价值,需要的朋友可以参考学习。
元组是Python中一种重要的内置数据类型。与列表一样,我们经常使用元组将多个对象保存为相应的数据容器。本文为大家总结了元组的三个不常用特性,感兴趣的小伙伴可以了解一下
什么是format函数?是一种字符串格式化的方法,主要是用来构造字符串。
这篇文章主要介绍了python中Flask Web 表单的使用方法介绍,表单的操作是Web程序开发中最核心的模块之一,绝大多数的动态交互功能都是通过表单的形式实现的。更多介绍需要的小伙伴可以参考下面文章内容
字符串转列表怎样实现,方法1,用list()直接转。方法2,如果字符串有规律特征的,则可以用split来转成想要的列表。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008