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