主要内容

出口HDF5文件

概述

分层数据格式、版本5 (HDF5)是一个通用的、独立于机器的标准将科学数据存储在文件中,发达国家超级计算应用中心(山)。HDF5使用广泛的工程和科学领域,想要一个标准的方式来存储数据,以便它可以共享。关于HDF5文件格式的更多信息,阅读HDF5文档可用HDF集团网站(https://www.hdfgroup.org)。

MATLAB®提供了两种方法来将数据导出到一个HDF5文件:

  • 高级功能,简化导出数据的过程中,在处理数值型数据集

  • 低级功能提供一个MATLAB接口在HDF5 C库例程

请注意

出口HDF4文件信息,有一个单独的和不兼容的格式,看看出口HDF4文件

出口数据使用MATLAB高级HDF5功能

最简单的方法从MATLAB编写数据或元数据工作区HDF5文件是使用这些MATLAB高级功能。

请注意

您可以使用高级功能只有数值数据。写非数字数据,您必须使用底层接口

  • h5create——创建一个HDF5数据集。

  • h5write——写入数据到一个HDF5数据集。

  • h5writeatt——写入数据HDF5属性。

关于如何使用这些功能的详细信息,请参见参考页面,其中包括例子。以下部分说明一些常见的使用场景。

数字数组写入HDF5数据集

这个示例创建了一个数组,然后将数组写入一个HDF5文件。

  1. 在工作区中创建一个MATLAB变量。这个示例创建了一个5-by-5数组uint8值。

    testdata = uint8(魔法(5))
  2. 创建HDF5文件和数据集,使用h5create

    h5create (“my_example_file。h5, / dataset1、大小(testdata))
  3. HDF5文件写数据。

    h5write (“my_example_file。h5, / dataset1 testdata)

出口数据使用MATLAB低级HDF5功能

MATLAB提供直接访问许多HDF5库中的函数低级HDF5库中的函数对应的函数。通过这种方式,您可以访问HDF5库从MATLAB的特点,如阅读和写作复杂数据类型和使用HDF5构造子集的能力。

HDF5库组织库函数集合,接口。例如,所有相关的例程使用文件,如打开和关闭,在H5F接口,F代表文件。MATLAB组织低级HDF5函数对应于每个HDF5接口的类。例如,MATLAB函数对应于HDF5文件接口(H5F) @H5F类文件夹。

以下部分提供更多细节关于如何使用MATLAB HDF5低级别的功能。

请注意

这个话题并没有描述的所有特性HDF5库或解释HDF5编程的基本概念。要有效地使用MATLAB HDF5低级功能,请参阅官方HDF5文档可用https://www.hdfgroup.org

地图HDF5函数的语法MATLAB函数的语法

在大多数情况下,低级HDF5 MATLAB函数的语法匹配相应的HDF5库函数的语法。例如,下面的函数签名H5FopenHDF5库中的函数。在HDF5函数签名,hid_therr_tHDF5类型,返回数值代表对象标识符或错误状态值。

hid_t H5Fopen (const char *名称、符号标志,hid_t access_id) / * * / C语法

在MATLAB中,每一个函数在一个HDF5接口是MATLAB类的一个方法。下面显示了相应的MATLAB函数的签名。首先注意,因为它是一个类的方法,您必须使用点符号调用MATLAB函数:H5F.open。这个MATLAB函数接受三个参数相同HDF5功能:特征向量包含名称、旗帜的HDF5-defined常数参数,和一个HDF5属性ID列表。您使用属性列表来指定不同HDF5对象的特征。在这种情况下,它是一个文件访问属性列表。请参阅HDF5文档,看看哪个常量可以使用与特定功能和注意,在MATLAB中,常量作为特征向量传递。

file_id = H5F.open(名称、标志、plist_id)

然而,一些函数和相应的MATLAB函数签名的不同HDF5库函数。一般来说,记住以下差异在使用MATLAB低级HDF5功能。

  • HDF5输出参数成为MATLAB返回值——有些HDF5库函数使用函数参数返回数据。因为MATLAB函数可以返回多个值,这些输出参数返回值。为了说明这一点,HDF5H5Dread函数返回的数据缓冲区参数。

    herr_t H5Dread (hid_t dataset_id, hid_t mem_type_id, hid_t mem_space_id, hid_t file_space_id, hid_t xfer_plist_id, void * buf) / * * / C语法

    相应的MATLAB函数变化的输出参数缓冲区成一个返回值。另外,在MATLAB函数中,非零或负值herr_t返回值成为MATLAB错误。使用MATLAB试一试- - - - - -语句来处理错误。

    buf = H5D。读(dataset_id、mem_type_id mem_space_id、file_space_id plist_id)

  • 字符串长度参数是不必要的——长度参数,使用一些HDF5库函数来指定一个字符串的长度参数,没有必要在相应的MATLAB函数。例如,H5Aget_nameHDF5库中的函数包括缓冲区作为输出参数和缓冲区的大小作为输入参数。

    ssize_t H5Aget_name (hid_t attr_id, size_t buf_size, char * buf) / * * / C语法

    相应的MATLAB函数变化的输出参数缓冲区返回值和滴buf_size参数。

    buf = H5A.get_name (attr_id)

  • 使用一个空数组指定NULL——无论HDF5库函数接受的价值,相应的MATLAB函数使用空数组([])。例如,H5Pset_fill_valueHDF5库中的函数接受的价值在指定的地方填写价值。

    herr_t H5Pset_fill_value (hid_t plist_id, hid_t type_id, const void *值)/ * * / C语法

    使用相应的MATLAB函数时,您可以指定一个空数组([])而不是

  • 使用单元格数组指定多个常量——HDF5库中的一些功能需要您指定的数组常量。例如,在H5Screate_simple函数,指定一个维度的数据空间可以无限,您使用常数H5S_UNLIMITED的维度maxdims。在MATLAB中,因为你通过常量作为特征向量,您必须使用一系列细胞的特征向量来实现相同的结果。下面的代码片段提供了一个示例使用的特征向量来指定这个常数单元阵列每个维度的数据空间。

    ds_id = h5。create_simple (2 [3 - 4] {‘H5S_UNLIMITED’‘H5S_UNLIMITED});

HDF5数据类型和之间的映射MATLAB数据类型

当HDF5低级函数从一个HDF5文件读取数据或一个HDF5文件写入数据,功能自动HDF5数据类型映射到MATLAB数据类型。

原子数据类型,例如常用的二进制格式数字(整数和浮点)和字符(ASCII),映射通常是简单的因为MATLAB支持类似的类型。金宝app看到表之间的映射HDF5原子数据类型和MATLAB数据类型这些映射列表。

HDF5原子数据类型和之间的映射MATLAB数据类型

HDF5原子数据类型 MATLAB数据类型
位域 拥挤的8位整数的数组
浮动 MATLAB单引号和双类型,提供他们所占用的64位或更少
签署和无符号的整数类型 相当于MATLAB整数类型,签署和无符号
不透明的 的数组uint8
参考 的数组uint8
字符串 MATLAB字符串数组

复合数据类型,例如聚合成一个或多个原子数据类型结构、多维数组,和可变长度的数据类型(一维数组),有时是模糊的,参照的映射HDF5数据类型。在HDF5 5-by-5包含一个数据集uint8每个元素是不同于一个价值1×1包含一系列5-by-5的数据集uint8值。在第一种情况下,数据集包含25观察的一个值。在第二种情况下,数据集包含一个观察25值。在MATLAB这两个数据集由一个5-by-5矩阵。

如果您的数据是一个复杂的数据集,您可能需要创建HDF5数据类型直接以确保你有你意愿的映射。看到表之间的映射HDF5复合数据类型和MATLAB数据类型对于列表默认映射。您可以指定数据类型向文件写入数据时使用H5Dwrite函数。有关更多信息,请参见HDF5数据类型接口文档。

HDF5复合数据类型和之间的映射MATLAB数据类型

HDF5复合数据类型 MATLAB数据类型
数组 扩展了数据类型,它包含的维度。例如,整数的数组HDF5映射到一个二维的整数数组在MATLAB。
复合 MATLAB的结构。注意:所有结构代表HDF5数据在MATLAB是标量。
枚举 整数数组,每个人都有一个关联的名称
可变长度 MATLAB一维细胞数组

报告数据集的维度

MATLAB低级HDF5功能维度和报告数据集的数据集的形状不同于MATLAB高级功能。为了便于使用,MATLAB高级功能报告数据集的维度与MATLAB列为主索引一致。符合HDF5库,支持嵌套数据集的可能性和复杂的数据类型,MATLAB的低级功能使用C行取向阵列金宝app尺寸报告。

使用MATLAB编写数据HDF5数据集低级功能

这个例子展示了如何使用MATLAB®HDF5低级函数来编写一个数据集,一个HDF5文件然后从文件读取的数据集。

创建一个2×3组数据写入一个HDF5文件。

testdata = [1 3 5;2 4 6];

创建一个新的HDF5文件命名my_file.h5在系统临时文件夹。使用MATLABH5F.create函数创建一个文件。这个MATLAB函数对应于HDF5函数,H5Fcreate。名称作为参数,指定您想要指定的文件,你想访问文件的类型(“H5F_ACC_TRUNC”在这种情况下),和可选的附加特征指定的文件创建属性列表和文件访问属性列表。在这种情况下,使用这些属性列表的默认值(“H5P_DEFAULT”)。通过C常量的MATLAB函数作为特征向量。

文件名= fullfile (tempdir,“my_file.h5”);文件标识= H5F.create(文件名,“H5F_ACC_TRUNC”,“H5P_DEFAULT”,“H5P_DEFAULT”);

H5F.create返回一个文件标识符对应HDF5文件。

创建的数据集文件的MATLAB函数。在HDF5编程模型中,您必须定义的数据类型和数据集的维数(数据空间)作为单独的实体。首先,使用H5T.copy函数来指定所使用的数据类型的数据集,在这种情况下,。这个MATLAB函数对应于HDF5函数,H5Tcopy

datatypeID = H5T.copy (“H5T_NATIVE_DOUBLE”);

H5T.copy返回一个数据类型标识符。

创建一个数据空间使用H5S.create_simple对应HDF5函数,H5Screate_simple。第一个输入,2数据空间的等级。第二个输入是一个数组指定每个维度的数据集的大小。因为HDF5行顺序存储数据和MATLAB数组组织列为主的顺序,你应该扭转维度区段使用前的顺序H5Screate_simple保存数据的布局。您可以使用fliplr为这个目的。

dim =大小(testdata);dataspaceID = H5S.create_simple (2, fliplr (dim), []);

H5S.create_simple返回一个数据空间标识符,dataspaceID。注意,其他软件程序使用行命令(如H5DUMP从HDF集团)可能会报告数据集的大小是3×2而不是2×3。

创建数据集使用H5D.create对应HDF5函数,H5Dcreate。指定的文件标识符,您想分配数据集的名称,数据类型标识符,标识符的数据空间,和一个数据集创建属性列表作为参数标识符。“H5P_DEFAULT”指定默认的属性列表设置。

dsetname =“my_dataset”;datasetID = H5D.create(文件标识、dsetname datatypeID, dataspaceID,“H5P_DEFAULT”);

H5D.create返回一个数据集标识符,datasetID

写数据到数据集使用H5D.write对应HDF5函数,H5Dwrite。输入参数数据集标识符,内存数据类型标识符,内存空间标识符,标识符的数据空间,传递属性列表的名称标识符和MATLAB变量写入的数据集。常数,“H5ML_DEFAULT”,指定自动映射到HDF5数据类型。常数,“H5S_ALL”,他告诉H5D.write所有的数据写入该文件。

H5D.write (datasetID“H5ML_DEFAULT”,“H5S_ALL”,“H5S_ALL”,“H5P_DEFAULT”,testdata);

关闭数据集、数据空间数据类型和文件对象。如果内部使用MATLAB函数,这些标识符的范围时自动关闭。

H5D.close (datasetID);H5S.close (dataspaceID);H5T.close (datatypeID);H5F.close(文件标识);

打开HDF5文件为了阅读你写的数据集。使用H5F.open打开文件的只读访问。这个MATLAB函数对应于HDF5函数,H5Fopen

文件标识= H5F.open(文件名,“H5F_ACC_RDONLY”,“H5P_DEFAULT”);

打开数据集阅读使用H5D.open对应HDF5函数,H5Dopen。作为参数指定的文件标识符和数据集的名称,前面定义的例子。

datasetID = H5D.open(文件标识,dsetname);

读取数据到MATLAB工作区使用H5D.read对应HDF5函数,H5Dread。输入参数数据集标识符,内存数据类型标识符,内存空间标识符,标识符的数据空间,和转让财产列表标识符。

returned_data = H5D.read (datasetID,“H5ML_DEFAULT”,“H5S_ALL”,“H5S_ALL”,“H5P_DEFAULT”);

比较原始的MATLAB变量,testdata刚刚创建的变量,returned_data

isequal (testdata returned_data)
ans =逻辑1

这两个变量是相同的。

写大数据集

编写一个大数据集时,您必须使用分块HDF5库的能力。创建一个属性列表,并使用H5P.set_chunk函数设置块大小的属性列表。假设你的数据集的维度(2 ^ 16 2 ^ 16)块大小是1024 - 1024。然后通过属性列表的最后一个参数数据集创建函数,H5D.create,而不是使用H5P_DEFAULT价值。

dim = (2 ^ 16 2 ^ 16);plistID = H5P.create (“H5P_DATASET_CREATE”);%创建属性列表chunk_size = min ([1024 - 1024], dim);%定义块大小H5P。set_chunk (plistID fliplr (chunk_size));%设置属性列表datasetID = H5D块大小。创建(文件标识、dsetname datatypeID、dataspaceID plistID);

保持正确的布局你的数据

当您使用下列函数处理dataspaces,你应该翻转维度区段保留数据的正确的布局。

  • H5D.set_extent

  • H5P.get_chunk

  • H5P.set_chunk

  • H5S.create_simple

  • H5S.get_simple_extent_dims

  • H5S.select_hyperslab

  • H5T.array_create

  • H5T.get_array_dims

写HDF5数据集使用动态加载的过滤器

MATLAB支金宝app持阅读和写作HDF5数据集使用动态加载的过滤器。HDF集团维护注册过滤的列表过滤器HDF集团网站上。

写一个数据集使用第三方过滤器,遵循这些步骤:

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

  2. 获得独特的过滤器过滤插件的标识符分配HDF集团从列表中注册的过滤器。

  3. 设置HDF5_PLUGIN_PATH环境变量包含插件安装二进制文件的文件夹。在Windows®系统,使用setenv在MATLAB命令。在Linux®Mac系统,执行该操作在一个终端窗口在你开始MATLAB。

在完成这些步骤之后,您可以使用高级或低级MATLAB HDF5函数来创建和使用第三方编写数据集通过其独特的过滤器过滤指定的标识符。有关更多信息,请参见HDF5动态加载的过滤器

Linux用户只:重建过滤器插件使用MATLABHDF5共享库

从R2021b开始,在某些情况下,Linux用户使用一个过滤器插件与回调核心HDF5库函数必须重建插件使用航运MATLAB HDF5共享库,/ matlab / bin / glnxa64 / libhdf5.so.x.x.x。如果你不重建插件使用这个版本的共享库,你可能会经历从未定义的行为到崩溃的问题。有关更多信息,请参见构建HDF5过滤器插件Linux使用MATLABHDF5共享库或GNU出口地图

相关的话题