Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

hdfread

从 HDF4 或 HDF-EOS 文件读取数据

语法

data = hdfread(filename, datasetname)
data = hdfread(hinfo)
data = hdfread(...,param,value,...)
data = hdfread(filename,EOSname,param,value,...)
[data,map] = hdfread(...)

说明

data = hdfread(filename, datasetname)filename 指定的 HDF4 或 HDF-EOS 文件返回 datasetname 指定的数据集中的所有数据。要确定 HDF4 文件中的数据集名称,请使用 hdfinfo 函数。

注意

hdfread 可以对 4.x 版本的 HDF 文件或 2.x 版本的 HDF-EOS 文件使用。要从 HDF5 文件读取数据,请使用 h5read

data = hdfread(hinfo) 返回结构体 hinfo 指定的数据集中的所有数据,该结构体由 hdfinfo 函数返回。在结构体 hinfo 中指定与特定类型的数据集相关的字段,并在有多个数据集时使用索引指定是哪个数据集。有关详细信息,请参阅指定要读取的数据集

data = hdfread(...,param,value,...) 根据指定参数和值对组返回数据子集。请参阅下表以查找不同数据集类型的有效参数和值。

data = hdfread(filename,EOSname,param,value,...)EOSname 指定的 HDF-EOS 点、网格或分段中设置数据字段的子集。

[data,map] = hdfread(...) 返回 8 位光栅图像的图像 data 和颜色图 map

子集设置参数

下表说明了可以与 hdfread 函数一起用于特定类型的 HDF4 数据的子集设置参数。这些数据类型包括

请注意以下事项:

  • 如果参数需要多个值,请使用元胞数组存储这些值。例如,'Index' 参数需要三个值:startstrideedge。与元胞数组一样,也将这些值括在花括号中。

    hdfread(..., 'Index', {start,stride,edge})
  • 作为索引的所有值都从 1 开始。


HDF 科学数据 (SD) 数据集的子集设置参数

使用 HDF SD 文件时,hdfread 支持该表中列出的参数。

参数

说明

'Index'

三元素元胞数组 {start,stride,edge},指定要从数据集读取的位置、范围和值

  • start - 从 1 开始的数组,指定要在文件中开始读取的位置

    默认值:1,从每个维度的第一个元素开始。指定的值不能超过数据集的任何维度的大小。

  • stride - 从 1 开始的数组,指定要读取的值之间的区间

    默认值:1,读取数据集的每个元素。

  • edge - 从 1 开始的数组,指定要读取的每个维度的长度

    默认值:包含对应维度的长度的数组

例如,此代码从 HDF 文件 example.hdf 读取数据集 Example SDS'Index' 参数指定 hdfread 从每个维度开头开始读取数据,直到每个维度结束,但仅每隔一个数据值读取第一个维度中的数据值。

data = hdfread('example.hdf','Example SDS','Index',{[],[2 1],[]})

HDF Vdata 集的子集设置参数

使用 HDF Vdata 文件时,hdfread 支持这些参数。

参数

说明

'Fields'

字符向量或字符串标量,指定要读取的字段的名称。指定多个字段名称时,请使用字符向量元胞数组或字符串数组。

'FirstRecord'

从 1 开始的数字,指定要从其开始读取的记录

'NumRecords'

指定要读取的记录总数的数字

例如,此代码从 HDF 文件 example.hdf 读取 Vdata 集 Example Vdata

data = hdfread('example.hdf','Example Vdata','FirstRecord', 2,'NumRecords', 5)

HDF-EOS 网格数据的子集设置参数

使用 HDF-EOS 网格数据时,hdfread 支持以下三种类型的参数:

  • 必需参数

  • 可选参数

  • 互斥参数 - 在调用 hdfread 时只能指定这些参数中的一个,不能将这些参数与任何可选参数结合使用。

    参数

    说明

    必需参数

    'Fields'

    字符向量或字符串标量,指定要读取的字段。只能为网格数据集指定一个字段名称。

    互斥的可选参数

    'Index'

    三元素元胞数组 {start,stride,edge},指定要从数据集读取的位置、范围和值

    start - 指定要在文件中开始读取的位置的数组

    默认值:1,从每个维度的第一个元素开始。指定的值不能超过数据集的任何维度大小。

    stride - 指定要读取的值之间的区间

    默认值:1,读取数据集的每个元素。

    edge - 指定要读取的每个维度长度的数组

    默认值:包含对应维度的长度的数组

    'Interpolate'

    二元素元胞数组 {longitude,latitude},指定定义双线性插值区域的经度和纬度点。每个元素都是指定经度和纬度坐标的 N 长度向量。

    'Pixels'

    二元素元胞数组 {longitude,latitude},指定定义区域的经度和纬度坐标。每个元素都是指定经度和纬度坐标的 N 长度向量。该区域转换为像素行和列,原点位于网格左上角。

    注意:这是读取 'Box' 区域的等效像素。

    'Tile'

    用于为支持图块的 HDF-EOS 网格文件指定要读取的图块坐标的向量

    可选参数

    'Box'

    二元素元胞数组 {longitude,latitude},指定定义区域的经度和纬度坐标。longitudelatitude 都是指定经度和纬度坐标的二元素向量。

    'Time'

    二元素元胞数组 [start stop],其中 startstop 是指定时间段起点和终点的数字

    'Vertical'

    二元素元胞数组 {dimension, range}

    dimension - 字符向量或字符串标量,指定要从中读取内容的数据集字段的名称。只能为网格数据集指定一个字段名称。

    range - 指定最小和最大子集范围的二元素数组。如果 dimension 是维度名称,则 range 指定要提取的元素范围。如果 dimension 是字段名称,则 range 指定要提取的值范围。

    'Vertical' 子集设置参数可以单独使用,也可以和 'Box''Time' 结合使用。要沿多个维度设置区域子集,在一个 hdfread 调用中最多可以使用八次 vertical 子集设置参数。

例如,

data = hdfread('grid.hdf','PolarGrid','Fields','ice_temp','Index', {[5 10],[],[15 20]})

HDF-EOS 点数据的子集设置参数

使用 HDF-EOS 点数据时,hdfread 包含两个必需参数和三个可选参数。

参数

说明

必需参数

'Fields'

字符向量或字符串标量,包含要读取的数据集字段的名称。要指定多个字段名称,请使用字符向量元胞数组或字符串数组。

'Level'

从 1 开始的数字,指定要从 HDF-EOS 点数据集中读取的级别

互斥的可选参数

'Box'

二元素元胞数组 {longitude,latitude},指定定义区域的经度和纬度坐标。longitudelatitude 都是指定经度和纬度坐标的二元素向量。

'RecordNumbers'

指定要读取的记录数目的向量

'Time'

二元素元胞数组 [start stop],其中 startstop 是指定时间段起点和终点的数字

例如,

hdfread(...,'Fields',{field1, field2},...
            'Level',level,'RecordNumbers',[1:50, 200:250])

HDF-EOS 分段数据的子集设置参数

使用 HDF-EOS 分段数据时,hdfread 支持以下三种类型的参数:

  • 必需参数

  • 可选参数

  • 互斥参数

在调用 hdfread 时只能使用这些互斥参数中的一个,不能将这些参数与任何可选参数结合使用。

参数

说明

必需参数

'Fields'

字符向量或字符串标量,包含要读取的数据集字段的名称。只能为分段数据集指定一个字段名称。

互斥的可选参数

'Index'

三元素元胞数组 {start,stride,edge},指定要从数据集读取的位置、范围和值

  • start - 指定要在文件中开始读取的位置的数组

    默认值:1,从每个维度的第一个元素开始。指定的值不能超过数据集的任何维度大小。

  • stride - 指定要读取的值之间的区间

    默认值:1,读取数据集的每个元素。

  • edge - 指定要读取的每个维度长度的数组

    默认值:包含对应维度的长度的数组

'Time'

三元素元胞数组 {start, stop, mode},其中 startstop 指定时间段的起点和终点,mode 是一个字符向量或字符串标量,定义在区域中包含交叉跟踪的条件。如果满足以下任一条件,交叉跟踪即包含在区域中:

  • 它的中点在框 (mode='midpoint') 内。

  • 或终点在框 (mode='endpoint') 内。

可选参数

'Box'

三元素元胞数组 {longitude, latitude, mode},指定定义区域的经度和纬度坐标。longitudelatitude 是一个二元素向量,指定经度和纬度坐标。mode 是一个字符向量或字符串标量,定义在区域中包含交叉跟踪的条件。如果满足以下任一条件,交叉跟踪即包含在区域中:

  • 它的中点在框 (mode='midpoint') 内。

  • 或终点在框 (mode='endpoint') 内。

  • 任何点在框 (mode='anypoint') 内。

'Vertical'

二元素元胞数组 {dimension, range}

  • dimension 是一个字符向量或字符串标量,指定设置数据子集所依据的维度名称或字段名称。

  • range 是指定最小和最大子集范围的二元素向量。如果 dimension 是维度名称,则 range 指定要提取的元素范围。如果 dimension 是字段名称,则 range 指定要提取的值范围。

    'Vertical' 子集设置参数可以单独使用,也可以和 'Box''Time' 结合使用。要沿多个维度设置区域子集,在一个 hdfread 调用中最多可以使用八次 vertical 子集设置参数。

例如,

hdfread('swath.hdf', 'Example Swath', 'Fields', 'Temperature', ...
         'Time', {5000, 6000, 'midpoint'})

示例

全部折叠

指定 HDF 文件的名称和数据集的名称。此示例从示例 HDF 文件中读取名为 temperature 的数据集。

data = hdfread('sd.hdf','temperature');

调用 hdfinfo 以检索有关 HDF 文件内容的信息。

fileinfo = hdfinfo('sd.hdf')
fileinfo = struct with fields:
      Filename: '/mathworks/devel/bat/Bdoc21a/build/matlab/toolbox/matlab/imagesci/sd.hdf'
    Attributes: [1x1 struct]
           SDS: [1x2 struct]
         Vdata: [1x1 struct]

hdfinfo 返回的数据中提取包含要导入的特定数据集相关信息的结构体。此示例使用 SDS 字段中的结构体检索科学数据集。

sds_info = fileinfo.SDS(2)
sds_info = struct with fields:
       Filename: '/mathworks/devel/bat/Bdoc21a/build/matlab/toolbox/matlab/imagesci/sd.hdf'
           Type: 'Scientific Data Set'
           Name: 'temperature'
           Rank: 2
       DataType: 'double'
     Attributes: [1x11 struct]
           Dims: [2x1 struct]
          Label: {}
    Description: {}
          Index: 1

将此结构体传递到 hdfread 以导入数据集中的数据。

data = hdfread(sds_info);

读取示例文件 example.hdf 中的 HDF-EOS 全局网格字段 TbOceanRain 中的数据。

data1 = hdfread('example.hdf','MonthlyRain','Fields','TbOceanRain');

读取同一字段的北半球的数据。使用 Box 参数指定该区域的经度和纬度坐标。

data2 = hdfread('example.hdf','MonthlyRain', ...
'Fields','TbOceanRain', ...
'Box', {[0 360],[0 90]});

检索有关示例文件 example.hdf 的信息。

fileinfo = hdfinfo('example.hdf');

检索有关 example.hdf 中的科学数据集的信息。

data_set_info = fileinfo.SDS;

检查数据集的大小。

data_set_info.Dims.Size
ans = 16
ans = 5

'index' 参数与 hdfread 一起使用,可以读取数据集中的数据子集。此示例指定起始索引为 [3 3]、值之间的间隔为 1([] 指默认值为 1)以及长度为 10 行和 2 列。

data = hdfread(data_set_info,'Index',{[3 3],[],[10 2]});
data(:,1)
ans = 10x1 int16 column vector

    7
    8
    9
   10
   11
   12
   13
   14
   15
   16

data(:,2)
ans = 10x1 int16 column vector

    8
    9
   10
   11
   12
   13
   14
   15
   16
   17

使用 hdfinfo 返回的信息中的 Vdata 字段读取三个数据字段 IdxTempDewpt

s = hdfinfo('example.hdf'); 
data = hdfread(s.Vdata(1),'Fields',{'Idx','Temp','Dewpt'})
data=3×1 cell array
    {[  1 2 3 4 5 6 7 8 9 10]}
    {[0 12 3 5 10 -1 3 0 2 1]}
    {[5 5 7 11 7 10 4 14 4 8]}

另请参阅

在 R2006a 之前推出