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

Обзор

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

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

  • Высокоуровневые функции, которые дают возможность импортировать данные при работе с числовыми наборами данных

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

Примечание

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

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

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

Примечание

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

  • 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 workspace, она сопоставляет типы данных HDF5 toMATLAB типы данных, как показано в приведенной ниже таблице.

Тип данных 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 Динамически Загруженные Фильтры.

Примечание

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

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

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

Была ли эта тема полезной?