导入HDF5文件
概述
HDF5是一种通用的、与机器无关的标准,用于在文件中存储科学数据,由国家超级计算应用中心(NCSA)开发。HDF5被广泛的工程和科学领域所使用,这些领域需要一种标准的方式来存储数据,以便可以共享数据。有关HDF5文件格式的更多信息,请阅读HDF集团网站上的HDF5文档(https://www.hdfgroup.org
).
MATLAB®提供了两种从HDF5文件导入数据的方法:
在处理数值数据集时,可以轻松导入数据的高级函数
通过提供对hdf5c库中的例程的访问,可以更完整地控制导入过程的低级函数
请注意
有关导入到HDF4文件的信息,这些文件具有独立的、不兼容的格式,请参见以编程方式导入HDF4文件.
使用HDF5高级功能导入数据
MATLAB包含几个函数,可用于检查HDF5文件的内容并将数据从文件导入MATLAB工作空间。
请注意
只能使用高级函数来读取数值数据集或属性。要读取非数值数据集或属性,必须使用底层接口.
有关如何使用这些函数的详细信息,请参阅它们的参考页面,其中包括示例。以下部分说明了一些常见的使用场景。
确定HDF5文件的内容
HDF5文件可以包含数据和元数据,称为属性.HDF5文件以类似于UNIX的层次结构的层次结构组织数据和元数据®文件系统。
在HDF5文件中,调用层次结构中的目录组.一个组可以包含其他组、数据集、属性、链接和数据类型。数据集是数据的集合,例如多维数字数组或字符串。属性是与另一个实体(如数据集)相关联的任何数据。链接类似于UNIX文件系统符号链接。链接是一种不需要复制对象就可以引用对象的方法。
数据类型是数据集或属性中数据的描述。数据类型说明如何解释数据集中的数据。
要快速查看HDF5文件的内容,请使用h5disp
函数。
h5disp('example.h5') HDF5示例。h5 Group '/' Attributes: 'attr1': 97 98 99 100 101 102 103 104 105 0 'attr2': 2x2 H5T_INTEGER Group '/g1' Group '/g1/g1.1' Dataset 'dset1.1.1' Size: 10x10 MaxSize: 10x10 Datatype: H5T_STD_I32BE (int32) ChunkSize: [] Filters: none属性:'attr1': 49 115 116 32 97 116 116 114 105…'attr2': 50 110 100 32 97 116 116 114 105…数据集'dset1.1.2' Size: 20 MaxSize: 20 Datatype: H5T_STD_I32BE (int32) ChunkSize: [] Filters: none Group '/g1/g1.2' Group '/g1/g1.2/g1.2.1' Link 'slink' Type:软链接Group '/g2' Dataset 'dset2.1' Size: 10 MaxSize: 10 Datatype: H5T_IEEE_F32BE (single) ChunkSize: [] Filters: none Dataset 'dset2.2' Size: 5x3 MaxSize: 5x3 Datatype: H5T_IEEE_F32BE (single) ChunkSize: [] Filters: none…
要了解HDF5文件的层次结构,请使用h5info
函数。h5info
返回一个结构,其中包含HDF5文件的各种信息,包括文件的名称。
info = h5info('example.h5') info =文件名:'matlabroot\matlab\toolbox\matlab\demos\example. txt 'h5'名称:'/'组:[4x1 struct]数据集:[]数据类型:[]链接:[]属性:[2x1 struct]
通过观察组
而且属性
字段,您可以看到该文件包含四个组和两个属性。的数据集
,数据类型
,链接
字段均为空,表示根组不包含任何数据集、数据类型或链接。要进一步研究示例HDF5文件的内容,请检查中的一个结构组
.下面的示例显示了该字段中第二个结构的内容。
level2 = info.Groups(2) level2 =名称:'/g2' Groups:[]数据集:[2x1 struct]数据类型:[]链接:[]属性:[]
在示例文件中,组名为/ g2
包含两个数据集。下图演示了样例HDF5文件组织的这一部分。
类中返回的结构之一可以获得关于数据集的信息,例如其名称、维度和数据类型数据集
字段。
dataset1 = level2.Datasets(1) dataset1 = Filename: 'matlabroot\example。h5' Name: '/g2/dset2.1' Rank: 1 data atype: [1x1 struct] dimms: 10 maxdimms: 10 Layout: '连续'属性:[]链接:[]Chunksize: [] Fillvalue: []
从HDF5文件导入数据
要从HDF5文件读取数据或元数据,请使用h5read
函数。作为参数,指定HDF5文件的名称和数据集的名称。(要读取属性的值,必须使用h5readatt
.)
为了说明,这个例子读取数据集,/ g2 / dset2.1
从HDF5样例文件example.h5
.
Data = h5read('example.h5','/g2/dset2.1') Data = 1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 1.8000 1.9000
将HDF5数据类型映射到MATLAB数据类型
当h5read
函数从HDF5文件读取数据到MATLAB工作空间,它将HDF5数据类型映射到MATLAB数据类型,如下表所示。
HDF5数据类型 | h5read回报 |
---|---|
位域 | 打包的8位整数数组 |
浮动 | MATLAB单和双类型,只要它们占用64位或更少 |
整数类型,有符号和无符号 | 等价的MATLAB整数类型,有符号和无符号 |
不透明的 | 的数组uint8 值 |
参考 | 返回引用所指向的实际数据,而不是引用的值。 |
字符串,固定长度和可变长度 | 字符串数组。 |
枚举 | 字符向量的单元格数组,其中每个枚举值都替换为对应的成员名 |
复合 | 1乘1结构数组;数据集的维数用结构的字段表示。 |
数组 | 使用与HDF5数组相同的数据类型的值数组。例如,如果数组是有符号的32位整数,则MATLAB数组将为类型int32 . |
MATLAB附带的HDF5示例文件包含所有这些数据类型的示例。
例如,数据集g3 /字符串
是一个字符串。
h5disp('example.h5','/g3/string') HDF5示例。h5数据集“字符串”大小:2 MaxSize: 2数据类型:H5T_STRING字符串长度:3填充:H5T_STR_NULLTERM字符集:H5T_CSET_ASCII字符类型:H5T_C_S1 ChunkSize:[]过滤器:无FillValue: "
现在从文件中读取数据,MATLAB将其作为字符向量的单元格数组返回。
s = h5read('example.h5','/g3/string') s = 'ab ' 'de ' >> whoos s Name Size Bytes Class Attributes s 2x1 236 cell
复合数据类型总是以1乘1的结构体返回。数据集的维数用结构的字段表示。例如,数据集g3 / compound2D
复合数据类型。
h5disp('example.h5','/g3/compound2D') HDF5示例。h5数据集'compound2D'大小:2x3 MaxSize: 2x3数据类型:H5T_COMPOUND成员'a': H5T_STD_I8LE (int8)成员'b': H5T_IEEE_F64LE (double) ChunkSize:[]过滤器:无FillValue: H5T_COMPOUND
现在从文件中读取数据,MATLAB将其作为1乘1的结构体返回。
data = h5read('example.h5','/g3/compound2D') data = a: [2x3 int8] b: [2x3 double]
使用HDF5低级功能导入数据
MATLAB提供了直接访问HDF5库中的数十个函数低级与HDF5库中的函数对应的函数。这样,您就可以从MATLAB中访问HDF5库的特性,例如读取和写入复杂的数据类型以及使用HDF5子集功能。有关更多信息,请参见使用MATLAB低级HDF5函数导出数据.
使用动态加载过滤器读取HDF5数据集
MATLAB支金宝app持使用动态加载过滤器读取和写入HDF5数据集。HDF组维护一个注册过滤器列表过滤器在他们的网站。
要读取使用用户定义的第三方过滤器写入的数据集,请遵循以下步骤:
在您的系统上以共享库或DLL的形式安装HDF5过滤器插件。
设置
HDF5_PLUGIN_PATH
将环境变量设置为包含已安装插件二进制文件的文件夹。Windows操作系统®系统,使用setenv
命令。Linux操作系统®或Mac系统,在启动MATLAB之前在终端窗口中执行此操作。
完成这些步骤后,可以使用高级或低级的MATLAB HDF5函数读取和访问使用第三方过滤器压缩的数据集。有关更多信息,请参见HDF5动态加载过滤器在HDF集团网站上。
Linux用户只:重建过滤器插件使用MATLABHDF5共享库
从R2021b开始,在某些情况下,使用具有核心HDF5库函数回调的过滤器插件的Linux用户必须使用附带的MATLAB HDF5共享库重新构建插件,/ matlab / bin / glnxa64 / libhdf5.so.x.x.x
.如果你不使用这个版本的共享库重新构建插件,你可能会遇到从未定义的行为到崩溃的问题。有关更多信息,请参见构建HDF5过滤器插件Linux使用MATLABHDF5共享库或GNU导出映射.