惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

马浩飞丨博客

ROS实现多机话题通信 Cloudflare R2 个人图床 Isaac Sim 机械臂逆运动学控制 ROS2_Rviz2显示URDF模型 ROS2基本命令总结 使用zsh创建更高效的shell环境 Isaac Sim 仿真环境使用简介 Ubuntu设置定时任务 审稿意见撰写流程 Ubuntu 固定USB设备端口名(ttyUSB0->自定义) Git+Github的代码备份与多设备同步 【设备使用】法奥意威 FR5 机械臂 Python 控制 Python识别图片中文字和数字_easyocr 【设备使用】omega.7主手配置与使用方法 【论文笔记】ACT 使用低成本硬件的双手操作模仿学习 【仿真实验】robomimic项目复现 【课程笔记】Stanford CS25 V2 - Robotics and Imitation Learning Ubuntu与Window双主机共用一套键鼠 Windows与Ubuntu双系统绑定同一个蓝牙设备(无需重新配对)
HDF5数据文件格式
马浩飞 · 2024-01-01 · via 马浩飞丨博客

[!abstract]
HDF5数据文件格式的简单介绍与基本使用方法。

1.1 什么是 hdf5 文件

HDF5是一种常见的跨平台数据储存文件,可以存储不同类型的图像和数据,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库。

可以把HDF5文件想象成一个容器,这个容器由多个不同类型的数据对象组成。数据对象可以是任意类型,例如:图片、表格、图像,甚至文档(PDF、Excel)。

1.2 hdf5 文件结构

HDF5 文件一般以 .h5.hdf5 作为后缀名,其文件结构包括两部分:GroupsDatasets

  • Group: 类似于文件夹,负责管理数据对象
  • Datasets: 类似于 numpy 中的数组 array,一个数据集由元数据(metadata)和数据本身(data)组成
    • Metadata: 元数据
      • Datatype: 数据类型
      • Dataspace: 原始数据的秩和维度
      • Properties: 该数据集的分块存储以及压缩情况
        • Chunked:
        • Chunked & Compressed:
      • Attributes: 为该数据的其它自定义属性
    • Data Values:

(1)Group 组

组负责管理数据对象。每个HDF5文件含有一个根组,根组包含其他组或者链接到其他文件的对象。组和组的成员与文件和文件夹类似,HDF5中对象也可以使用路径来表示:

  • / 代表根组
  • /a 代表根组下的 a 成员
  • /a/b 代表组 a 下的一个成员,a 是根组 / 下的成员

(2)Datasets 数据集

一个数据集由元数据(metadata)和数据本身(data)组成。

image.png

其中的 Metadata 包括一下几个部分:数据类型(datatype)、数据空间(dataspace)、性质(property)、属性(attribute)。

(3)Datatype 数据类型

数据类型描述数据集中元素的数据类型,例如 float

  • 内置数据类型:包括标准数据类型和原生数据类型
  • 衍生数据类型:例如符合数据类型(16位整型、1个字符、一个2x3x2的浮点数组组合而成)

image.png

(4)Dataspace数据空间

描述数据集内部数据元素(data element)的分布情况:

  • Rank:表示数据集维度的个数(例如下图中数据维度个数为2,即2维数组)
  • Dimensions:数据空间的维度(数据空间的维度为5x3)
    • NULL:代表数据集内没有任何数据元素
    • 标量:代表只有一个元素
    • 向量:代表数据集是一个数组

数据空间的维度可以是固定的,也可以是不固定的。如果是不固定的,代表该数据集的大小是可变的(例如,可扩展的数据集)。

image.png

(5)Properties 性质

HDF5包含很多默认的性质,可以是用HDF5 Property List API来修改这些性质。

(6)Attribute 属性

属性包含一个名称(name)和一个值(value),是对HDF5对象的一些额外描述。通常都是一些很小的、用户自定义的元数据。

二、Python 操作HDF5文件

(1)使用 h5py

1
import h5py

(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
24

f = h5py.File("h5py_example.hdf5", "w")


g1 = f.create_group("bar1")
g2 = f.create_group("bar2")


d = f.create_dataset("dset", data=np.arange(16).reshape([4, 4]))


d.attrs["myAttr1"] = [100, 200]
d.attrs["myAttr2"] = "Hello, world!"


c1 = g1.create_group("car1")
d1 = g1.create_dataset("dset1", data=np.arange(10))


c2 = g2.create_group("car2")
d2 = g2.create_dataset("dset2", data=np.arange(10))


f.close()

最后得到的 hdf5 文件结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+-- '/'
| +-- group "bar1"
| | +-- group "car1"
| | | +-- None
| | |
| | +-- dataset "dset1"
| |
| +-- group "bar2"
| | +-- group "car2"
| | | +-- None
| | |
| | +-- dataset "dset2"
| |
| +-- dataset "dset"
| | +-- attribute "myAttr1"
| | +-- attribute "myAttr2"
| |
|

(3)读取 hdf5 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

f = h5py.File("h5py_example.hdf5", "r")


print(f.filename, ":")
print([key for key in f.keys()], "\n")


d = f["dset"]
print(d.name, ":")
print(d[:])


for key in d.attrs.keys():
print(key, ":", d.attrs[key])


g = f["bar1"]


print([key for key in g.keys()])


print(f["/bar1/dset1"][:])
print(f["bar1"]["dset1"][:])
print(g['dset1'][:])


f.close()

参考:

  1. HDF Group
  2. 仙棠生信. HDF5简介. 知乎
  3. NoNo721. HDF5 数据文件简介. 知乎

打赏

  • 微信支付

    微信支付

  • 支付宝

    支付宝