Fork me on GitHub

HDF5快速指南

HDF5快速指南

1.核心概念

一个HDF5文件是一种存放两类对象的容器:datasetgroup

  • Dataset是类似于数组的数据集
  • Group是类似文件夹一样的容器,存放dataset和其他group

在使用HDF5的时候需要牢记一句话:groups类比词典,dataset类比Numpy中的数组。

HDF5dataset虽然与Numpy的数组在接口上很相近,但是支持更多对外透明的存储特征,如数据压缩,误差检测,分块传输。

2.创建和读取HDF5文件

1)创建HDF5文件

1
2
3
import h5py
import numpy as np
f = h5py.File('mytestfile.h5', 'w') #创建一个h5文件

然后我们借助文件对象的一系列方法添加数据。其中create_dataset用于创建给定形状和数据类型的空dataset

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

我们也可以用现有的 Numpy 数组来初始化一个 dataset

1
2
arr = np.arange(100)
dset2 = f.create_dataset("init", data=arr)

HDF代表Hierarchical Data Format(分层数据格式)。HDF5文件中group对象类似于文件夹,我们创建的文件对象本身就是一个group,称为root group.

创建subgroup是使用create_group的方法实现的。

1
grp = f.create_group("subgroup")

2)读取HDF5文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#HDF5创建
f = h5py.File('mytestfile.h5','w') #创建一个h5文件,文件指针是f
dset = f.create_dataset("mydataset", (100,), dtype='i')

imgData = np.zeros((30,3,128,256))
f.create_dataset("data", data=imgData)

f['labels'] = range(100) #将数据写入文件的主键labels下面

grp = f.create_group("subgroup")

f.close() #关闭文件

#HDF5的读取:
f = h5py.File('mytestfile.h5','r') #打开h5文件
keys = f.keys()
for key in keys:
print(key) #打印出所有的主键
layer = f[key]
print(layer) #打印出每个主键对应的数据
a = f['data'][:] #取出主键为data的所有的值
print(a)
f.close()

3)属性

HDF5的一个很棒的特点是你可以在数据旁边存储元数据。所有的group和dataset都支持叫做属性的数据形式。属性通过attrs成员访问,类似于python中词典格式。

1
2
dset.attrs['temperature'] = 99.5
print(dset.attrs['temperature']) # 99.5
-------------本文结束感谢您的阅读-------------

本文作者:乔羽 / FightingJoey

发布时间:2017年05月13日 - 22:15

最后更新:2018年09月27日 - 10:09

原始链接:https://fightingjoey.github.io/2017/05/13/开发/HDF5快速指南/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!