使用高级函数导入 HDF4 文件
概述
分层数据格式 (HDF4) 是由美国国家超级计算应用中心 (NCSA) 开发的用于存储文件中科学数据的通用型机器无关标准。有关这些文件格式的详细信息,请阅读 HDF 网站 (www.hdfgroup.org
) 上的 HDF 文档。
HDF-EOS 是 HDF4 的一种扩展,由美国国家航空和航天局 (NASA) 开发,用于存储从地球观测系统 (EOS) 返回的数据。有关此 HDF4 扩展的详细信息,请参阅 NASA 网站 (www.hdfeos.org
) 上的 HDF-EOS 文档。
MATLAB® 包括几个导入 HDF4 文件的选项,将在以下各节讨论。
注意
有关导入单独的不兼容格式 HDF5 数据的信息,请参阅Import HDF5 Files。
使用 MATLAB HDF4 高级函数
要从 HDF 或 HDF-EOS 文件导入数据,可以使用 MATLAB HDF4 高级函数 hdfread
。hdfread
函数提供了一种从 HDF4 或 HDF-EOS 文件导入数据的编程方法,它隐藏了许多在使用Import HDF4 Files Using Low-Level Functions中描述的低级 HDF 函数导入数据时需要知道的细节。
本节介绍这些高级 MATLAB HDF 函数,包括
要将数据导出到 HDF4 文件,必须使用 MATLAB HDF4 低级函数。
使用 hdfinfo 获取有关 HDF4 文件的信息
要获取有关 HDF4 文件内容的信息,请使用 hdfinfo
函数。hdfinfo
函数返回一个结构体,其中包含有关文件及文件中数据的信息。
此示例返回有关 MATLAB 附带的示例 HDF4 文件的信息:
info = hdfinfo('example.hdf')
info = Filename: 'matlabroot\example.hdf' Attributes: [1x2 struct] Vgroup: [1x1 struct] SDS: [1x1 struct] Vdata: [1x1 struct]
要获取有关存储在文件中的数据集的信息,请查看 SDS
字段。
使用 hdfread 从 HDF4 文件导入数据
要使用 hdfread
函数,必须指定要读取的数据集。可以指定文件名和数据集名称作为参量,也可以指定包含此信息的 hdfinfo
函数返回的结构体。以下示例显示了这两种方法。有关如何导入数据集中数据子集的信息,请参阅读取数据集中数据的子集。
使用
hdfinfo
函数确定 HDF4 文件中数据集的名称。info = hdfinfo('example.hdf')
info = Filename: 'matlabroot\example.hdf' Attributes: [1x2 struct] Vgroup: [1x1 struct] SDS: [1x1 struct] Vdata: [1x1 struct]
要确定文件中数据集的名称及其他相关信息,请查看
SDS
字段的内容。SDS 结构体中的Name
字段给出了数据集的名称。dsets = info.SDS
dsets = Filename: 'example.hdf' Type: 'Scientific Data Set' Name: 'Example SDS' Rank: 2 DataType: 'int16' Attributes: [] Dims: [2x1 struct] Label: {} Description: {} Index: 0
使用
hdfread
函数从 HDF4 文件读取数据集。将数据集的名称指定为函数的一个参数。请注意,数据集名称区分大小写。此示例返回一个 16×5 数组:dset = hdfread('example.hdf', 'Example SDS')
dset = 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 7 8 9 10 7 8 9 10 11 8 9 10 11 12 9 10 11 12 13 10 11 12 13 14 11 12 13 14 15 12 13 14 15 16 13 14 15 16 17 14 15 16 17 18 15 16 17 18 19 16 17 18 19 20 17 18 19 20 21 18 19 20 21 22
也可以在由包含此信息的
hdfinfo
返回的结构体中指定该特定字段。例如,要读取科学数据集,请使用SDS
字段。dset = hdfread(info.SDS);
读取数据集中数据的子集. 要读取数据集的子集,可以使用可选的 'index'
参数。index 参数的值是一个包含三个向量的元胞数组,这些向量指定数据集中开始读取的位置、跳过间隔(例如,每隔一个数据项读取)以及读取的数据量(例如,沿每个维度的长度)。在 HDF4 术语中,这些参数称为 start、stride 和 edge 值。
例如,下面的代码
在第 3 行第 3 列处开始读取数据 (
[3 3]
)。读取数组中的每个元素 (
[]
)。读取 10 行 2 列的内容 (
[10 2]
)。subset = hdfread('Example.hdf','Example SDS',... 'Index',{[3 3],[],[10 2 ]})
subset = 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17