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