Импорт файлов 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 можно увидеть, что файл содержит четыре группы и два атрибута. The 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  

Составные типы данных всегда возвращаются как struct 1 на 1. Размерности набора данных выражены в полях struct. Для примера набор данных /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 возвращает его как struct 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 subsetting. Для получения дополнительной информации смотрите Использование низкоуровневых функций HDF5 MATLAB для экспорта данных.