hdf5
Мощная иерархическая модель данных и библиотека для хранения и управления большими, сложными и гетерогенными наборами данных. Библиотека предоставляет гибкие возможности для организации данных, хранения многомерных массивов и присоединения метаинформации. Благодаря своей переносимости и масштабируемости, HDF5 широко используется в научных вычислениях, промышленности и других областях, работающих с большими данными.
Особенности
- иерархическая организация данных, подобная файловой системе;
- поддержка сложных типов данных, включая композитные, перечисления и массивы переменной длины;
- эффективный ввод-вывод для многомерных массивов с возможностью частичного чтения/записи;
- высокая производительность благодаря chunked хранению, сжатию и параллельному вводу-выводу;
- переносимость данных между различными архитектурами за счёт единого формата файла.
Основные компоненты
HDF5 предоставляет набор C-функций и объектно-ориентированных C++ обёрток для работы с файлами и данными (подробнее с документацией можно ознакомиться здесь).
Управление файлами и библиотекой
Модули для открытия/закрытия файлов и глобального управления библиотекой. В C++ API используются классы H5::H5File и H5::H5Library.
Основные методы класса H5Library:
H5::H5Library::open()иH5::H5Library::close()— инициализация и завершение работы библиотеки;H5::H5Library::checkVersion(maj, min, rel)— проверка соответствия версий;H5::H5Library::getLibVersion(maj, min, rel)— получение версии библиотеки;H5::H5Library::garbageCollect()— принудительная очистка памяти, занятой библиотекой.
Методы класса H5File:
H5::H5File::H5File(name, flags, ...)— открытие или создание файла;H5::H5File::open()/H5::H5File::close()— открыть/закрыть файл;H5::H5File::flush()— сброс данных на диск;H5::H5File::unlink(name)— удаление объекта из файла.
Группы
Группы служат контейнерами для организации объектов в иерархию, аналогично директориям в файловой системе. Группы могут содержать датасеты, другие группы и именованные типы данных.
Основные методы класса H5::Group:
H5::Group::createGroup(name)— создание новой группы;H5::Group::openGroup(name)— открытие существующей группы;H5::Group::getNumObjs()— количество объектов в группе;H5::Group::getObjnameByIdx(idx)— имя объекта по индексу;H5::Group::getChildType(idx)— тип объекта (датасет, группа, тип).
Датасеты
Датасеты — это основные контейнеры данных, представляющие многомерные массивы элементов одного типа. Они состоят из сырых данных, метаданных (тип данных, пространство данных, свойства) и могут быть сжаты или зашумованы.
Основные методы класса H5::DataSet:
H5::DataSet::DataSet()— создание датасета (черезH5File::createDataSet);H5::DataSet::write(buffer, mem_type, mem_space, file_space)— запись данных;H5::DataSet::read(buffer, mem_type, mem_space, file_space)— чтение данных;H5::DataSet::getSpace()— получение пространства данных (dataspace);H5::DataSet::getTypeClass()— класс типа данных;H5::DataSet::getCreatePlist()— список свойств создания.
Типы данных
Типы данных описывают элементную структуру датасетов и атрибутов. Поддерживаются как предопределённые атомарные типы, так и пользовательские композитные типы, напоминающие структуры C/C++.
Основные методы класса H5::DataType и наследников:
H5::DataType::copy(type)— копирование типа;H5::DataType::getClass()— класс типа (целое, float, строка, композитный и т.д.);H5::DataType::getSize()— размер типа в байтах;H5::CompType::insertMember(name, offset, type)— добавление поля в композитный тип;H5::StrType::setCset(cset)— установка кодировки строки (ASCII, UTF-8).
Пространства данных
Пространства данных описывают размерность и форму многомерных массивов. Они определяют как логическую структуру датасета, так и подмножества данных (selection) для частичного ввода-вывода.
Основные методы класса H5::DataSpace:
H5::DataSpace::DataSpace(rank, dims, maxdims)— создание простого пространства;H5::DataSpace::getSimpleExtentDims(dims)— получение размеров;H5::DataSpace::getSimpleExtentNdims()— ранг (количество размерностей);H5::DataSpace::selectHyperslab(op, start, stride, count, block)— выбор гиперслайса;H5::DataSpace::getSelectNpoints()— количество выбранных элементов.
Атрибуты
Атрибуты — это небольшие метаданные, прикреплённые к объектам. Они позволяют хранить описательную информацию, параметры и пользовательские аннотации.
Основные методы класса H5::Attribute:
H5::H5Object::createAttribute(name, data_type, data_space)— создание атрибута у объекта;H5::H5Object::openAttribute(name)— открытие атрибута;H5::Attribute::write(data_type, buffer)— запись данных атрибута;H5::Attribute::read(data_type, buffer)— чтение данных атрибута;H5::Attribute::getSpace()— пространство данных атрибута.