h5py是Python语言用来操作HDF5的模块。下面的文章主要介绍h5py的快速入门指南,翻译自h5py的官方文档:http://docs.h5py.org/en/latest/quick.html 。该翻译仅为个人学习h5py为目的,如有翻译不当之处,请速联系笔者或提供正确的翻译,非常感谢!

安装

使用Anaconda或者Miniconda:

conda install h5py

用Enthought Canopy,可以使用GUI安装包安装或用

enpkg h5py

安装。用pip或setup.py安装,请参考安装方式。

核心概念

一个HDF5文件就是一个容器,用于储存两类对象:datasets,类似于数组的数据集合;groups,类似于文件夹的容器,可以储存datasets和其它groups。当使用h5py时,最基本的准则为:

groups类似于字典(dictionaries),dataset类似于Numpy中的数组(arrays)。

假设有人给你发送了一个HDF5文件, mytestfile.hdf5(如何创建这个文件,请参考:附录:创建一个文件).首先你需要做的就是打开这个文件用于读取数据:

>>> import h5py
>>> f = h5py.File('mytestfile.hdf5', 'r')

这个File对象是你的起点。那么这个文件中储存了什么呢?记住,h5py.File就像一个Python字典,因此我们可以查看这些键值,

>>> list(f.keys())
['mydataset']

根据我们的观察,这个文件中有一个dataset,即mydataset. 让我们把这个dataset作为Dataset对象来检验

>>> dset = f['mydataset']

我们得到的这个对象不是一个数组,而是一个HDF5 dataset. 就像Numpy中的数据那样,datasets有形状(shape)和数据类型(data type)

>>> dset.shape
(100,)
>>> dset.dtype
dtype('int32')

同时它们也支持数组风格的切片操作。下面是你如何完成这个文件中的一个dataset的读写的方法

>>> dset[...] = np.arange(100)
>>> dset[0]
0
>>> dset[10]
10
>>> dset[0:100:10]
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

想要更多参考,请前往File Objects和Datasets.

附录:创建一个文件

此时此刻,你也许会好奇mytestdata.hdf5是如何创建的。当File对象初始化后,我们通过将模式(mode)设置为w来创建一个文件。其它模式(mode)为a(用于读、写、新建)和r+(用于读、写)。一个完整的File模式以及它们的含义的列表可参考File对象。

>>> import h5py
>>> import numpy as np
>>> f = h5py.File("mytestfile.hdf5", "w")

File对象有几个看上去挺有趣的方法。其一为create_dataset,顾名思义,就是通过给定形状和数据类型来创建一个dataset

>>> dset = f.create_dataset("mydataset", (100,), dtype='i')

File对象是上下文管理器,因此,下面的代码也可运行

>>> import h5py
>>> import numpy as np
>>> with h5py.File("mytestfile.hdf5", "w") as f:
>>>     dset = f.create_dataset("mydataset", (100,), dtype='i')

Groups和分层结构

“HDF”是“Hierarchical Data Format”的缩写。每个HDF5文件中的对象都有一个名字(name),它们以类似于POSIX风格的分层结构存放,用/分隔符分隔

>>> dset.name
u'/mydataset'

在这个系统中“文件夹”(folders)被命名为groups. 我们创建的File对象本身也是一个group, 在这种情形下是根group(root group),名字为/:

>>> f.name
u'/'

创建一个子group(subgroup)可以通过一个巧妙的命令create_group来完成。但是,我们首先需要以读/写模式来打开文件

>>> f = h5py.File('mydataset.hdf5', 'r+')
>>> grp = f.create_group("subgroup")

所有Group对象,如同File对象一样,也有create_*方法:

>>> dset2 = grp.create_dataset("another_dataset", (50,), dtype='f')
>>> dset2.name
u'/subgroup/another_dataset'

顺便说一句,你不需要手动地创建所有的中间groups. 指定一个完整的路径同样可行

>>> dset3 = f.create_dataset('subgroup2/dataset_three', (10,), dtype='i')
>>> dset3.name
u'/subgroup2/dataset_three'

Groups支持大部分的Python字典风格的接口。你可以使用条目获取(item-retrieval)的语法来获取这个文件中的对象:

>>> dataset_three = f['subgroup2/dataset_three']

迭代一个group,就会产生它的成员的名字:

>>> for name in f:
...     print name
mydataset
subgroup
subgroup2

成员关系检测也可以通过使用名字来实现:

>>> "mydataset" in f
True
>>> "somethingelse" in f
False

你甚至可以使用完整的路径的名字:

>>> "subgroup/another_dataset" in f
True

它也有你熟悉的keys(), values(), items() 和iter() 的方法,以及get()方法。

因为迭代一个group只会产生它的直属成员,所以想要迭代一个完整的文件,可以使用Group的方法visit()和visititems(), 它们通过一个调用(callable)来实现:

>>> def printname(name):
...     print name
>>> f.visit(printname)
mydataset
subgroup
subgroup/another_dataset
subgroup2
subgroup2/dataset_three

想要更多参考,请前往Groups.

属性

HDF5的最好特征之一就是你可以在描述的数据后储存元数据(metadata)。所有的groups和datasets都支持几个数据位的附属命名,称为属性。(All groups and datasets support attached named bits of data called attributes.)

属性可以通过attrs这个代理对象来获取,这会再一次执行字典接口:

>>> dset.attrs['temperature'] = 99.5
>>> dset.attrs['temperature']
99.5
>>> 'temperature' in dset.attrs
True

想要更多参考,请前往Attributes.

注意:本人现已开通微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注哦~~

h5py快速入门指南 1相关推荐

  1. h5py快速入门指南

    h5py是Python语言用来操作HDF5的模块.下面的文章主要介绍h5py的快速入门指南,翻译自h5py的官方文档:http://docs.h5py.org/en/lates... .该翻译仅为个人 ...

  2. BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自 | GitHub    作者 | Jay Alammar 转自 | 机器之心 如 ...

  3. BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南

    2019-12-31 10:50:59 选自GitHub 作者:Jay Alammar 参与:王子嘉.Geek AI 如果你是一名自然语言处理从业者,那你一定听说过最近大火的 BERT 模型.本文是一 ...

  4. RMAN快速入门指南

    RMAN快速入门指南   1. What is RMAN? 什么是RMAN?    4 2. Terminology 专业词汇解释    4 2.1. Backup sets 备份集合    4 2. ...

  5. 150页书籍《PyTorch 深度学习快速入门指南》附PDF电子版

    为什么说是极简教程,首先本书只涵盖了150页.内容比较精简,特别适合作为 PyTorch 深度学习的入门书籍.为什么这么说呢?因为很多时候,一份厚重的书籍往往会削弱我们学习的积极性,在学习一门新的语言 ...

  6. 2017 Vue.js 2快速入门指南

    注意,据部分读者反映本文水多,怕湿身者勿进.后续推荐详解 Vue & Vuex 实践 2017 Vue.js 2快速入门指南翻译自Vue.js 2 Quickstart Tutorial 20 ...

  7. Flux快速入门指南

    翻译自 http://www.jackcallister.com/2015/02/26/the-flux-quick-start-guide.html 2015年2月26日 本文将概述如何使用Flux ...

  8. AngularJS快速入门指南09:SQL

    我们可以将之前章节中的代码用来从数据库中读取数据. 通过PHP Server从MySQL数据库中获取数据 <div ng-app="myApp" ng-controller= ...

  9. AngularJS快速入门指南03:表达式

    AngularJS通过表达式将数据绑定到HTML. AngularJS表达式 AngularJS表达式写在双大括号中:{{ 表达式语句 }}. AngularJS表达式绑定数据到HTML的方式与ng- ...

最新文章

  1. Git的使用---版本控制
  2. 【Python】学习笔记总结(第二阶段(7-9)——汇总篇)
  3. 基本概念—监督与非监督
  4. ASP.NET MVC 2.0
  5. MySQL 7种日志类型 详解
  6. leetcode|第三大的数java题解
  7. 【渝粤教育】广东开放大学 建筑工程施工 形成性考核 (58)
  8. 朴素贝叶斯算法--过滤垃圾短信
  9. 联合国超10万名员工记录遭泄露
  10. Java中String,StringBuffer,StringBuilder的区别及其使用
  11. Xilinx浮点数IP核使用记录
  12. KGB成功破解特朗普的秘密消息
  13. 关系代数笛卡尔积和自然连接的例子
  14. 职业选手图解教你如何DIY装机
  15. 互联网厂商抢着布局的“无币区块链”到底是什么?
  16. 蚂蚁金服微贷事业群电话面试分享
  17. 淘宝双11大数据分析(环境篇)
  18. 在建工程直接费用化_​在建工程资本化费用化区别
  19. 威士忌(whiskey)
  20. ZO-signSGD

热门文章

  1. ASP.NET Core基础知识(三)【依赖关系注入(服务)】
  2. VMware虚拟机可以上网,但主机不能上网,物理机通过虚拟机共享上网
  3. 一道测试题:改版某个APP界面,你要如何下手
  4. QSFP28和QSFP+光模块能兼容吗
  5. 微信公众号菜单栏规划怎么设置?
  6. Matlab机器人工具箱(3-1):五自由度机械臂(正逆运动学)
  7. python+pyqt5实现RPG游戏角色生成器
  8. rabbitmq 3.8.3 最新版下载 及安装
  9. android设计指南非官方中文版(apkbus)
  10. 随时随地办公成常态,保护机密在外安全,这些IP-guard应用可别错过