Импорт файлы 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Типы данных, и 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, как показано в приведенной ниже таблице.

Тип данных HDF5h5read Возвращается
Битовое полеМассив упакованных 8-битных целых чисел
ПлаваниеОдин и двойные типы MATLAB, при условии, что они занимают 64 бита или меньше
Целочисленные типы, подписанные и без знакаЭквивалентные целочисленные типы MATLAB, подписанные и без знака
НепрозрачныйМассив uint8 значения
СсылкаВозвращает фактические данные, на которые указывает ссылка, не значение ссылки.
Строки, фиксированная длина и переменная длинаМассив ячеек из символьных векторов
ПеречисленияМассив ячеек из символьных векторов, где каждое перечисляемое значение заменяется именем члена-корреспондента
Составной объектМассив структур 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 Динамически Загруженные Фильтры.

Примечание

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

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

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