exponenta event banner

Импорт файлов HDF5

Обзор

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

MATLAB ® предоставляет два метода импорта данных из файла HDF5:

  • Функции высокого уровня, упрощающие импорт данных при работе с цифровыми наборами данных

  • Низкоуровневые функции, которые обеспечивают более полный контроль над процессом импорта, предоставляя доступ к подпрограммам в библиотеке HDF5 C

Примечание

Сведения об импорте в файлы HDF4, имеющие отдельный несовместимый формат, см. в разделе Программный импорт файлов HDF4.

Использование функций верхнего уровня HDF5 для импорта данных

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

Примечание

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

  • h5disp - Просмотр содержимого файла HDF5

  • h5info - создание структуры, содержащей все метаданные, определяющие файл HDF5;

  • h5read - Считывание данных из переменной в файле HDF5

  • h5readatt - считывать данные из атрибута, связанного с переменной в файле HDF5 или с самим файлом (глобальный атрибут).

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

Определение содержимого файла HDF5

HDF5 файлы могут содержать данные и метаданные, называемые атрибутами. HDF5 файлы организуют данные и метаданные в иерархической структуре, аналогичной иерархической структуре файловой системы UNIX ®.

В файле HDF5 каталоги в иерархии называются группами. Группа может содержать другие группы, наборы данных, атрибуты, связи и типы данных. Набор данных - это совокупность данных, например многомерный числовой массив или строка. Атрибут - это любые данные, связанные с другим объектом, например с набором данных. Ссылка аналогична символьной ссылке файловой системы UNIX. Ссылки - это способ ссылаться на объекты без необходимости создания копии объекта.

Типы данных - это описание данных в наборе данных или атрибуте. Типы данных указывают, как интерпретировать данные в наборе данных.

Для быстрого просмотра содержимого файла HDF5 используйте h5disp функция.

h5disp('example.h5')

HDF5 example.h5 
Group '/' 
    Attributes:
        'attr1':  97 98 99 100 101 102 103 104 105 0 
        'attr2':  2x2 H5T_INTEGER
    Group '/g1' 
        Group '/g1/g1.1' 
            Dataset 'dset1.1.1' 
                Size:  10x10
                MaxSize:  10x10
                Datatype:   H5T_STD_I32BE (int32)
                ChunkSize:  []
                Filters:  none
                Attributes:
                    'attr1':  49 115 116 32 97 116 116 114 105 ... 
                    'attr2':  50 110 100 32 97 116 116 114 105 ... 
            Dataset 'dset1.1.2' 
                Size:  20
                MaxSize:  20
                Datatype:   H5T_STD_I32BE (int32)
                ChunkSize:  []
                Filters:  none
        Group '/g1/g1.2' 
            Group '/g1/g1.2/g1.2.1' 
                Link 'slink'
                    Type:  soft link
    Group '/g2' 
        Dataset 'dset2.1' 
            Size:  10
            MaxSize:  10
            Datatype:   H5T_IEEE_F32BE (single)
            ChunkSize:  []
            Filters:  none
        Dataset 'dset2.2' 
            Size:  5x3
            MaxSize:  5x3
            Datatype:   H5T_IEEE_F32BE (single)
            ChunkSize:  []
            Filters:  none
					.
					.
					.

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

info = h5info('example.h5')
info = 

         Filename: 'matlabroot\matlab\toolbox\matlab\demos\example.h5'
          Name: '/'
        Groups: [4x1 struct]
      Datasets: []
     Datatypes: []
         Links: []
    Attributes: [2x1 struct]

Глядя на Groups и Attributes можно увидеть, что файл содержит четыре группы и два атрибута. Datasets, Datatypes, и Links все поля пусты, что указывает на то, что корневая группа не содержит наборов данных, типов данных или ссылок. Для дальнейшего изучения содержимого файла HDF5 образца изучите одну из структур в Groups. В следующем примере показано содержимое второй структуры в этом поле.

level2 = info.Groups(2)

level2 = 

          Name: '/g2'
        Groups: []
      Datasets: [2x1 struct]
     Datatypes: []
         Links: []
    Attributes: []

В файле образца группа с именем /g2 содержит два набора данных. На следующем рисунке показана эта часть примера организации файлов HDF5.

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

dataset1 = level2.Datasets(1)

dataset1 = 
      Filename: 'matlabroot\example.h5'
          Name: '/g2/dset2.1'
          Rank: 1
      Datatype: [1x1 struct]
          Dims: 10
       MaxDims: 10
        Layout: 'contiguous'
    Attributes: []
         Links: []
     Chunksize: []
     Fillvalue: []

Импорт данных из файла HDF5

Для чтения данных или метаданных из файла HDF5 используйте h5read функция. В качестве аргументов укажите имя файла HDF5 и имя набора данных. (Для считывания значения атрибута необходимо использовать h5readatt.)

Для иллюстрации в этом примере считывается набор данных: /g2/dset2.1 из файла образца HDF5 example.h5.

data = h5read('example.h5','/g2/dset2.1')

data =

    1.0000
    1.1000
    1.2000
    1.3000
    1.4000
    1.5000
    1.6000
    1.7000
    1.8000
    1.9000

Сопоставление типов данных HDF5 с типами данных MATLAB

Когда h5read считывает данные из файла HDF5 в рабочую область MATLAB, сопоставляет HDF5 типы данных с типами данных MATLAB, как показано в таблице ниже.

HDF5 Тип данныхh5read Возвращает
Битовое полеМассив упакованных 8-разрядных целых чисел
ПлаваниеMATLAB одиночного и двойного типов при условии, что они занимают 64 бита или менее
Целочисленные типы, подписанные и неподписанныеЭквивалентные целочисленные типы MATLAB, со знаком и без знака
НепрозрачныйМассив uint8 ценности
СсылкаВозвращает фактические данные, на которые указывает ссылка, а не значение ссылки.
Строки, фиксированная длина и переменная длинаМассив ячеек символьных векторов
EnumsМассив ячеек символьных векторов, где каждое перечисляемое значение заменяется соответствующим именем элемента
Комплексмассив структур 1 на 1; размеры набора данных выражены в полях структуры.
МножестваМассив значений, использующий тот же тип данных, что и HDF5 массив. Например, если массив имеет 32-разрядные целые числа со знаком, массив MATLAB будет иметь тип int32.

Пример файла HDF5, включенного в MATLAB, содержит примеры всех этих типов данных.

Например, набор данных /g3/string является строкой.

h5disp('example.h5','/g3/string')
HDF5 example.h5 
Dataset 'string' 
    Size:  2
    MaxSize:  2
    Datatype:   H5T_STRING
        String Length: 3
        Padding: H5T_STR_NULLTERM
        Character Set: H5T_CSET_ASCII
        Character Type: H5T_C_S1
    ChunkSize:  []
    Filters:  none
    FillValue:  ''

Теперь считывайте данные из файла, MATLAB возвращает их как массив ячеек символьных векторов.

s = h5read('example.h5','/g3/string')

s = 

    'ab '
    'de '

>> whos s
  Name      Size            Bytes  Class    Attributes

  s         2x1               236  cell  

Составные типы данных всегда возвращаются в виде структуры 1 на 1. Размеры набора данных выражаются в полях структуры. Например, набор данных /g3/compound2D является составным типом данных.

h5disp('example.h5','/g3/compound2D')
HDF5 example.h5 
Dataset 'compound2D' 
    Size:  2x3
    MaxSize:  2x3
    Datatype:   H5T_COMPOUND
        Member 'a':  H5T_STD_I8LE (int8)
        Member 'b':  H5T_IEEE_F64LE (double)
    ChunkSize:  []
    Filters:  none
    FillValue:  H5T_COMPOUND

Теперь считывайте данные из файла, MATLAB возвращает их как структуру 1 к 1.

data = h5read('example.h5','/g3/compound2D')

data = 

    a: [2x3 int8]
    b: [2x3 double]

Чтение набора данных HDF5 с динамически загруженными фильтрами

В R2015a и более поздних версиях MATLAB поддерживает чтение наборов данных HDF5, которые записываются с помощью стороннего фильтра. Для чтения наборов данных с помощью функции динамически загружаемого фильтра необходимо:

  • Установите подключаемый модуль фильтра HDF5 в системе как общую библиотеку или библиотеку DLL.

  • Установите HDF5_PLUGIN_PATH для указания на установку.

Дополнительные сведения см. в разделе Динамически загруженные фильтры HDF5.

Примечание

Запись HDF5 наборов данных с использованием динамически загруженных фильтров не поддерживается.

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

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