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