Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

以编程方式导入 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 高级函数 hdfreadhdfread 函数提供了一种从 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 函数返回的结构体。以下示例显示了这两种方法。有关如何导入数据集中数据子集的信息,请参阅读取数据集中数据的子集

  1. 使用 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
  2. 使用 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 术语中,这些参数称为 startstrideedge 值。

例如,下面的代码

  • 在第 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