python中h5py开源库的使用样例详解
作者:燕阳天 发布时间:2022-03-30 00:37:03
一、h5py模块介绍
本文只是简单的对h5py库的基本创建文件,数据集和读取数据的方式进行介绍!如果读者需要进一步详细的学习h5py的更多知识,请参考h5py的官方文档。
h5py简单介绍
一个HDF5文件是一种存放两类对象的容器:dataset和group. Dataset是类似于数组的数据集,而group是类似文件夹一样的容器,它好比python中的字典,有键(key)和值(value),存放dataset和其他group。在使用h5py的时候需要牢记一句话:
groups类比字典
,dataset类比Numpy中的数组
。
HDF5的dataset虽然与Numpy的数组在接口上很相近,但是支持更多对外透明的
存储特征
,如:数据压缩
,误差检测
,分块传输
。
二、h5py模块使用
h5py创建的文件后缀名为:
.hdf5
1、h5py接口简单介绍
h5py模块的使用主要分成两步走:
1)创建
.hdf5
类型文件句柄(创建一个对象) # 读取文件把“w”改成“r”
f=h5py.File("myh5py.hdf5","w")
2)创建数据(dataset)或组(group)
创建数据(dataset):
f.create_dataset(self, name, shape=None, dtype=None, data=None, **kwds)
创建组(group):
create_group(self, name, track_order=False)
2、h5py的使用样例
创建一个h5py文件
import h5py
#要是读取文件的话,就把w换成r
f=h5py.File("myh5py.hdf5","w")
在当前目录下会生成一个myh5py.hdf5文件
创建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
.............
[]
[]
Reference:
1、blog.csdn.net/csdn1569884…
2、blog.csdn.net/yudf2010/ar…
来源:https://juejin.cn/post/7095558678891200520
猜你喜欢
- 大多数做过网页设计的都知道“CSS框架”,而且肯定有很多设计师已经开始在作品中使用CSS框架。就像其他编程语言一样,CSS也可以把一些重复使
- “/xxxxx”应用程序中的服务器错误。 -------------------------------------------------
- 在编程时你一定碰到过时间触发的事件,在VB中有timer控件,而asp中没有,假如你要不停地查询数据库来等待一个返回结果的话,我想你一定知道
- 1. 引言在某些场景下,我们不仅需要进行实时人脸检测追踪,还要进行再加工;这里进行摄像头实时人脸检测,并对于实时检测的人脸进行初步提取;单个
- 出于工作需要,学习了GAN,原理这块就不多讲了,主要讲怎么训练自己的数据生成新的图片,因为博客上大多是生成MNIST数据集,生成自己的图片时
- Python的matplotlib模块中的errorbar函数可以绘制误差棒图,本次主要绘制不带折线的误差棒图。1.基本参数errorbar
- 如果我们的web应用有大量的异步请求,而这些异步请求是在web服务器认证的情况下,那当我们请求发生在服务器认证失效下,服务器自动302到登录
- sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。关于这个项目的详细介绍请看:
- 一、需要的参数1、通讯用户:touser 或 通讯组:toparty2、企业ID:corpid3、应用ID/密钥:agentId,secre
- 主要讲 except 和 not in 的性能上的区别。 代码如下:CREATE TABLE tb1(ID int) CREAT
- 如何实现让每句话的头一个字母都大写? <%dim txtFnametxtFName = &qu
- 添加jar包 官网下载jar包idea导入jar包:检查官网下载jar包官网地址:MySQL :: Download Connec
- 小编想把用python将列表[1,1,1,1,1,1,1,1,1,1] 和 列表 [2,2,2,2,2,2,2,2,2,2]对应相加成[3,
- Microsoft® SQL Server™ 2000 由一系列产品组成,不仅能够满足最大的数据处理系统
- 运行方法: 1. 打开python2 IDLE; 2. 输入 fro
- Matlab将矩阵保存到csv和txt文件语法:csvwrite(filename,M)csvwrite(filename,M,row,co
- 相信大家在日常学习或者是阅读英文文章的过程中,难免会出现几个不认识的单词,或者想快速翻译某段英文的意思。今天,利用Python爬虫等知识,教
- 第1步:安装cross-envnpm i --save-dev cross-env 第2步:修改各环境下的参数在config/目录下添加te
- 效果图代码<template> <div class="outWrap"> &nbs
- centos7用crontab进行mysql定时备份1、建立 mysql3306_backup.sh 文件文件名及路径可以自定义,个人习惯将