使用h5py操作hdf5文件
HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件。HDF 最早由美国国家超级计算应用中心 NCSA 开发,目前在非盈利组织 HDF 小组维护下继续发展。当前流行的版本是 HDF5。HDF5 拥有一系列的优异特性,使其特别适合进行大量科学数据的存储和操作,如它支持非常多的数据类型,灵活,通用,跨平台,可扩展,高效的 I/O 性能,支持几乎无限量(高达 EB)的单文件存储等。
HDF5文件层次化的存储两类对象:
- dataset:数据集,一个数据集就是一个数组。数据集就是叶子节点,是文件结点。
- group:目录,一个group可以包含若干个key-value,其中key是字符串,value是dataset。
这两类对象都可以设置各种属性,属性用于描述group和dataset的一些特点。一个HDF5文件从一个命名为“/”的group开始,一个HDF5文件只有一个根group。
用 h5py 操作 HDF5 文件,我们可以像使用目录一样使用 group,像使用 numpy 数组一样使用 dataset,像使用字典一样使用属性,非常方便和易用。
打开/创建
class File(name, mode=None, driver=None, libver=None, userblock_size=None, **kwds)
打开或创建一个 HDF5 文件,name 为文件名字符串,mode 为打开文件的模式,driver 可以指定一种驱动方式,如需进行并行 HDF5 操作,可设置为 'mpio',libver 可以指定使用的兼容版本,默认为 'earliest',也可以指定为 'latest',userblock_size 以字节为单位指定一个在文件开头称作 user block 的数据块,一般不需要设置。返回所打开文件的句柄。
mode | 说明 |
---|---|
r | 只读,文件必须存在 |
r+ | 读写,文件必须存在 |
w | 创建新文件写,已经存在的文件会被覆盖掉 |
w- | / x 创建新文件写,文件如果已经存在则出错 |
a | 打开已经存在的文件进行读写,如果不存在则创建一个新文件读写,此为默认的 mode |
创建group
create_group(self, name, track_order=False)
创建一个新的 group。以类似目录路径的形式指明所创建 group 的名字 name,如果 track_order 为 True,则会跟踪在当前 group 下的 group 和 dataset 创建的先后顺序。该方法可以在打开的文件句柄(相当于 "/" group)或者一个存在的 group 对象上调用,此时 name 的相对路径就是相对于此 group 的。
创建dataset
create_dataset(self, name, shape=None, dtype=None, data=None, **kwds)
创建一个新的 dataset。以类似文件路径的形式指明所创建 dataset 的名字 name,shape 以一个 tuple 或 list 的形式指明创建 dataset 的 shape,用 "()" 指明标量数据的 shape,dtype 指明所创建 dataset 的数据类型,可以为 numpy dtype 或者一个表明数据类型的字符串,data 指明存储到所创建的 dataset 中的数据。如果 data 为 None,则会创建一个空的 dataset,此时 shape 和 dtype 必须设置;如果 data 不为 None,则 shape 和 dtype 可以不设置而使用 data 的 shape 和 dtype,但是如果设置的话,必须与 data 的 shape 和 dtype 兼容。
添加attribute
打开的文件句柄(相当于 "/" group),group 和 dataset 上都可以创建 attribute,以类似于字典的操作方式创建和读取 attribute。
示例代码一:
import h5py
import numpy as npX = np.random.rand(1, 10, 4).astype('float32')
y = np.random.rand(1, 10, 5).astype('float32')h5f = h5py.File('data.h5', 'w') # 以写模式打开文件
h5f.create_dataset('X_train', data=X) # 添加数据集
h5f.create_dataset('y_train', data=y) # 添加数据集
h5f.close()h5f = h5py.File('data.h5', 'r') # 以读模式打开文件
X = h5f['X_train'] # 通过下标方式获取数据集
Y = h5f['y_train']
h5f.close()
示例代码二:
import osimport h5py
import numpy as npfile_name = 'test.hdf5'
# create a new HDF5 file
f = h5py.File(file_name)
# create a new group
f.create_group('/grp1') # or f.create_group('grp1')
# create a nother group inside grp1
f.create_group('/grp1/grp2') # or f.create_group('grp1/grp2')
# create a dataset in group "/"
data = np.arange(6).reshape(2, 3)
f.create_dataset('dset1', data=data) # or f.create_dataset('/dset1', data=data)
# create another dataset in group /grp1
f.create_dataset('grp1/dset2', data=data) # or f.create_dataset('/grp1/dset2', data=data)
# create an attribute of "/"
f.attrs['a'] = 1 # or f.attrs['/a'] = 1
# create an attribute of group "/grp1"
f['grp1'].attrs['b'] = 'xyz'
# create an attribute of dataset "/grp1/dset2"
f['grp1/dset2'].attrs['c'] = np.array([1, 2])
# close file
f.close()# open the existing test.hdf5 for read only
f = h5py.File(file_name, 'r')
# read dataset /dset1
print('/dset1 = %s' % f['dset1'][:])
# read dataset /grp1/dset2
print('/grp1/dset2 = %s' % f['/grp1/dset2'][:])
# get attributes
print(f.attrs['a'])
print(f['grp1'].attrs['b'])
print(f['grp1/dset2'].attrs['c'])# remove the created file
os.remove(file_name)
示例代码三:
import h5py
import numpy as npfile_name = 'test.hdf5'
f = h5py.File(file_name, mode='w')
data = np.array([1, 2, 3])
f['/one'] = data
f.attrs['one'] = 'haha'
print(f.attrs.keys())
print(f['one'])
print(f.attrs['one'])
参考资料
http://docs.h5py.org/en/stable/quick.html
http://www.h5py.org/
https://www.jianshu.com/p/de9f33cdfba0
转载于:https://www.cnblogs.com/weiyinfu/p/10740653.html
使用h5py操作hdf5文件相关推荐
- python怎么打开h5文件_Python 操作 HDF5文件
在Matlab操作HDF5文件中已经详细介绍了HDF5文件已经利用Matlab对其进行操作的方法.这篇文章总结一下如何在Python下使用HDF5文件.我们仍然按照Matlab操作HDF5文件的顺序进 ...
- matlab查看hdf5数据,Matlab 操作 HDF5文件
HDF5文件 在使用Matlab对数据进行预处理时,遇到了内存不足的问题,因为数据量太大,在处理完成以前内存已经爆满.如果使用Matlab的.m文件对文件进行存储的话,则需要将数据分割成多个文件,对后 ...
- Python处理HDF5文件:h5py库
h5py官方文档 简介 HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件.最早由美国国家超级计算应用中心 NCSA 研究开发,目 ...
- 利用pandas读写HDF5文件
一.简介 HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式,文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一个H ...
- 如何生成HDF5文件
在使用深度学习学习图像文件的时候,如果图片文件很多,比如大几千张,或者几万张.如果将一个图片再接一个图片导入到内存中,会极大地拖慢深度学习算法运行速度.我们都有过这样的经验,如果将一个文件夹里面有几万 ...
- 《Python和HDF 5大数据应用》——2.4 你的第一个HDF5文件
本节书摘来自异步社区<Python和HDF 5大数据应用>一书中的第2章,第2.4节,作者[美]Andrew Collette(科莱特),胡世杰 译,更多章节内容可以访问云栖社区" ...
- Python操作HDF5存储数据方法总结
写在前面 HDF是什么 可视化工具 Pandas内置HDF文件操作 踩坑记录 参考文献 后记 写在前面 最近在做股价预测有关项目,需要大量股票数据,然而手头的CSV格式的数据对硬盘的占用越来越大, ...
- python读取hdf5文件_科学网—python读hdf5文件 - 钱磊的博文
读hdf5文件和读fits差不多,需要知道类似文件头的东西,这里是一个变量的名称.这可以通过定义一个prt函数结合h5py报的工具来实现如下 def prt(name): print(name) fi ...
- html显示hdf5文件,图片转换成HDF5文件(加载,保存)
翻译http://machinelearninguru.com/deep_learning/data_preparation/hdf5/hdf5.html 当我们谈论深度学习时,通常首先想到的是大量数 ...
最新文章
- RoadFlow工作流引擎安装与部署
- 用神经网络二分类吸引子与排斥子
- 【我的区块链之路】- Hyperledger fabric的简单入门(四)链码的编写及调试
- 深入浅出springboot 下载_有没有相见恨晚的学习模电好方法?《新概念模拟电路》全五册合集免费下载...
- 标准成本、目标成本、实际成本
- TCP/IP学习笔记(六)Nagle算法
- logback 的过滤器和异步日志和自定义 logger
- hutool 读取扩展名文件_JPG,PNG,GIF,TIFF、SVG玩设计必须了解的文件格式你知道几个?...
- sql加上唯一索引后批量插入_MySQL当批量插入遇上唯一索引
- [转载] python怎么将十进制转换为二进制_python十进制和二进制的转换方法(含浮点数)
- Kaggle/Titanic python分析和建模
- mysql能将查询结果与表左查询,MySQL查询与结构
- 微信平台自动获取Token
- 世界杯为战斗民族的历史再添荣耀与光辉_数字体验_新浪博客
- 安卓开发:记事本App
- 计算机上瘾英语对话,对手机上瘾的英语作文(精选5篇)
- 5 个免费的受欢迎的 SQLite 管理工具
- C/S构架和B/S构架
- JAVA 实现《飞机大战-II》游戏
- JavaFX8开发过程中的问题记录