主要内容

导入HDF5文件

概述

HDF5是一种通用的、与机器无关的标准,用于在文件中存储科学数据,由国家超级计算应用中心(NCSA)开发。HDF5被广泛的工程和科学领域所使用,这些领域需要一种标准的方式来存储数据,以便可以共享数据。有关HDF5文件格式的更多信息,请阅读HDF集团网站上的HDF5文档(https://www.hdfgroup.org).

MATLAB®提供了两种从HDF5文件导入数据的方法:

  • 在处理数值数据集时,可以轻松导入数据的高级函数

  • 通过提供对hdf5c库中的例程的访问,可以更完整地控制导入过程的低级函数

请注意

有关导入到HDF4文件的信息,这些文件具有独立的、不兼容的格式,请参见以编程方式导入HDF4文件

使用HDF5高级功能导入数据

MATLAB包含几个函数,可用于检查HDF5文件的内容并将数据从文件导入MATLAB工作空间。

请注意

只能使用高级函数来读取数值数据集或属性。要读取非数值数据集或属性,必须使用底层接口

  • h5disp—查看HDF5文件内容。

  • h5info-创建一个包含定义HDF5文件的所有元数据的结构。

  • h5read—从HDF5文件中的变量中读取数据。

  • h5readatt-从HDF5文件中与变量相关的属性或文件本身(全局属性)中读取数据。

有关如何使用这些函数的详细信息,请参阅它们的参考页面,其中包括示例。以下部分说明了一些常见的使用场景。

确定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组维护一个注册过滤器列表过滤器在他们的网站。

要读取使用用户定义的第三方过滤器写入的数据集,请遵循以下步骤:

  1. 在您的系统上以共享库或DLL的形式安装HDF5过滤器插件。

  2. 设置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导出映射

相关的话题