Иерархический Формат данных, Версия 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, чтобы Экспортировать Данные.