Иерархический формат данных, версия 5, (HDF5) - универсальный, машинно-независимый стандарт хранения научных данных в файлах, разработанный Национальным центром суперкомпьютерных приложений (NCSA). HDF5 используется широким кругом инженерных и научных областей, которые хотят стандартного способа хранения данных, чтобы их можно было совместно использовать. Дополнительные сведения о формате файла HDF5 см. в документации по HDF5, доступной на веб-сайте HDF (https://www.hdfgroup.org).
MATLAB ® предоставляет два метода импорта данных из файла HDF5:
Функции высокого уровня, упрощающие импорт данных при работе с цифровыми наборами данных
Низкоуровневые функции, которые обеспечивают более полный контроль над процессом импорта, предоставляя доступ к подпрограммам в библиотеке HDF5 C
Примечание
Сведения об импорте в файлы HDF4, имеющие отдельный несовместимый формат, см. в разделе Программный импорт файлов HDF4.
MATLAB включает несколько функций, которые можно использовать для проверки содержимого файла HDF5 и импорта данных из файла в рабочую область MATLAB.
Примечание
Высокоуровневые функции можно использовать только для чтения числовых наборов данных или атрибутов. Для чтения нечисловых наборов данных или атрибутов необходимо использовать низкоуровневый интерфейс.
Дополнительные сведения об использовании этих функций см. на справочных страницах, содержащих примеры. Следующие разделы иллюстрируют некоторые распространенные сценарии использования.
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 используйте 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Когда 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]В R2015a и более поздних версиях MATLAB поддерживает чтение наборов данных HDF5, которые записываются с помощью стороннего фильтра. Для чтения наборов данных с помощью функции динамически загружаемого фильтра необходимо:
Установите подключаемый модуль фильтра HDF5 в системе как общую библиотеку или библиотеку DLL.
Установите HDF5_PLUGIN_PATH для указания на установку.
Дополнительные сведения см. в разделе Динамически загруженные фильтры HDF5.
Примечание
Запись HDF5 наборов данных с использованием динамически загруженных фильтров не поддерживается.
MATLAB обеспечивает прямой доступ к десяткам функций в библиотеке HDF5 с низкоуровневыми функциями, которые соответствуют функциям в библиотеке HDF5. Таким образом, можно получить доступ к функциям библиотеки HDF5 из MATLAB, таким как чтение и запись сложных типов данных и использование возможностей подзадачи HDF5. Дополнительные сведения см. в разделе Использование низкоуровневых функций HDF5 MATLAB для экспорта данных.