Программный импорт HDF4 файлов

Обзор

Иерархический Формат Данных (HDF4) - универсальный, машинно-независимый стандарт хранения научных данных в файлах, разработанный Национальным центром суперкомпьютерных приложений (NCSA). Для получения дополнительной информации об этих форматах файлов см. документацию HDF на веб-сайте HDF (www.hdfgroup.org).

HDF-EOS является расширением HDF4, которое было разработано Национальным управлением по аэронавтике и исследованию космического пространства (НАСА) для хранения данных, возвращаемых из Earth Observing System (EOS). Для получения дополнительной информации об этом расширении для HDF4 смотрите документацию HDF-EOS на веб-сайте НАСА (www.hdfeos.org).

MATLAB® включает несколько опций импорта файлов HDF4, обсуждаемых в следующих разделах.

Примечание

Для получения информации об импорте HDF5 данных, который является отдельным, несовместимым форматом, смотрите Импорт файлов HDF5.

Использование MATLAB HDF4 высокоуровневых функций

Для импорта данных из файла HDF или HDF-EOS можно использовать функцию высокого уровня HDF4 MATLAB hdfread. The hdfread функция предоставляет программный способ импорта данных из файла HDF4 или HDF-EOS, который все еще скрывает многие детали, которые необходимо знать, если вы используете низкоуровневые функции HDF, описанные в Import HDF4 Files Using Low-Level Functions.

В этом разделе описываются эти высокоуровневые функции MATLAB HDF, включая

Чтобы экспортировать данные в файл HDF4, необходимо использовать низкоуровневые функции HDF4 MATLAB.

Использование hdfinfo для получения информации о файле HDF4

Чтобы получить информацию о содержимом файла HDF4, используйте hdfinfo функция. The hdfinfo функция возвращает структуру, которая содержит информацию о файле и данных в файле.

Этот пример возвращает информацию о выборке файла HDF4, включенного в MATLAB:

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. Определите имена наборов данных в файле HDF4, используя hdfinfo функция.

    info = hdfinfo('example.hdf')
    
    info = 
    
          Filename: 'matlabroot\example.hdf'
        Attributes: [1x2 struct]
            Vgroup: [1x1 struct]
               SDS: [1x1 struct]
             Vdata: [1x1 struct]

    Чтобы определить имена и другую информацию о наборах данных в файле, смотрите на содержимое SDS поле. The Name поле в структуре SDS задает имя набора данных.

    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. Считайте набор данных из файла HDF4, используя hdfread функция. Укажите имя набора данных как параметр функции. Обратите внимание, что имя набора данных зависит от регистра. Этот пример возвращает массив 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 терминологии эти параметры называются значениями начала, шага и ребра.

Для примера, этот код

  • Начинает чтение данных в третьей строке, третьем столбце ([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