Иерархический Формат данных, Версия 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
Типы данных
, и 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-битных целых чисел |
Float | Один и двойные типы 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]
MATLAB обеспечивает прямой доступ к десяткам функций в библиотеке HDF5 с низкоуровневыми функциями, которые соответствуют функциям в библиотеке HDF5. Таким образом можно получить доступ к функциям библиотеки HDF5 из MATLAB, таким как чтение и запись сложных типов данных и использование возможностей подмножества HDF5. Для получения дополнительной информации смотрите Используя Низкоуровневые HDF5 Функции MATLAB, чтобы Экспортировать Данные.
Начиная в R2015a, поддержки MATLAB, читая наборы данных HDF5, которые записаны с помощью стороннего фильтра. Чтобы считать наборы данных, использующие динамически загруженную функцию фильтра, вы должны:
Установите плагин фильтра HDF5 в своей системе как разделяемая библиотека или DLL.
Установите HDF5_PLUGIN_PATH
переменная окружения, чтобы указать на установку.
Для получения дополнительной информации смотрите, HDF5 Динамически Загруженные Фильтры.
Примечание
Наборы данных Writing HDF5, использующие динамически загруженные фильтры, не поддерживаются.
Начиная в R2021b, в определенных случаях, Linux® пользователи, использующие плагин фильтра с коллбэками к базовым библиотечным функциям HDF5, должны восстановить плагин с помощью совместно использованной библиотеки поставляющегося MATLAB HDF5, /matlab/bin/glnxa64/libhdf5.so.103.3.0
. Если вы не восстанавливаете плагин с помощью этой версии разделяемой библиотеки, вы можете испытать проблемы в пределах от неопределенного поведения к катастрофическим отказам. Для получения дополнительной информации смотрите Сборку Плагины Фильтра HDF5 на Linux Используя MATLAB HDF5 Разделяемая Библиотека или Карта Экспорта GNU.