Pull to refresh

Comments 14

На всякий случай, пакет netCDF4 тоже умеет работать с этим форматом.
Кстати, в HDF5 ещё есть поддержка автоматического подсчёта контрольных сумм для проверки целостности данных.
И ещё дополнительные фильтры можно прицеплять к уже созданному файлу, например:
h5repack -f FLET in.h5 out.h5 — добавит фильтр для подсчёта контрольной суммы к файлу in.h5 и сохранит его в out.h5. Потом контроль целостности будет автоматически проверятся если его открывать через h5py
Аналогично с упаковкой, можо сначала создавать и работать с файлами без неё, а потом запаковать файлы и продолжать работать с потерей скорости: h5repack -f SHUF -f GZIP=9 in.h5 out.h5
через h5py подсчёт сумм включается через fletcher32=True в create_dataset

HDF5 — крутой и продуманный формат, а многие про него даже не слышали. Хорошо, что вы написали про него, но в статье местами очень корявый перевод.

Можно, конечно, свалить на оригинал, но будем только рады если вы потыкаете пальцем на неточности — будем исправлять.

Например, "имитируемые данные" (что это вообще?) или "надстроенная библиотека".


Наборы данных (dataset) являются хранителями наших данных, в основном строительных блоков формата HDF5.

Несогласованное предложение.


мы просто создаем пустой набор данных, способный удерживать до 1000 элементов

Возможно, лучше использовать слово "хранить" вместо "удерживать"?


Фраза "Оптимизация пространства" вообще звучит странно, особенно в контексте работы с типами данных и занимаемой памятью.


Чтобы иметь возможность расширять третью ось нашего набора данных без фиксированного максимума

Я понимаю, что в numpy-терминологии есть понятие axis, но по-русски "расширять ось" и "фиксированный максимум" в этом контексте звучит странно.


Представьте, что вы приобретаете фильм, но вы не знаете, как долго он будет идти.

Думаю, тут имеется в виду получение данных видеопотока с камеры, например, а из предложения можно понять, что мы покупаем фильм и не знаем сколько он будет идти. И как это связано с HDF5? :)

Ага. Понятно куда рыть. На выходных займусь этим. Маякну как закончу :)
Ещё есть одна особенность:
d = f.create_dataset('dataset', (100000,), dtype='float16')
создаёт массив с 16-и битными float'ами (т.е по 2 байта), позволяет сильно экономить место на диске, если нормальная точность не нужна.
Я так понимаю, проблему инкрементального бэкапа можно решить с включением chanks.
А как идет запись изменений — только дописывания файла или изменение в любой его части?
Что насчет эффективности хранения мультимедии или любых пользовательских файлов, а не только сырых математических данных?
Есть ли примеры сравнения с другими форматами, вроде Pack файла гита или всяких других форматов хранения данных, вроде формата borgbackup?
Было бы круто сделать такое расширенное сравнение на хабре, вместо чтения исходной документации :)
HDF оптимизирован для операций с многомерными массивами — т.е для операций чтения записи произвольного гипер-среза n-мерного массива и для хранения метаданных для таких массивов.
Для мультимедии он подходит слабо.

Парочка добавлений:


  • Кроме h5py есть основанный на нем pyTables предоставляющий более высокоуровневый интерфейс.
  • Есть набор консольных утилит для взаимодействия с hdf5 файлами.
  • Pandas частично поддерживает импорт/экспорт в hdf5
  • Зачастую полезно установить степень сжатия в 1, тогда потери на работу процессора будут меньше чем уменьшение времени записи и общая производительность будет выше.
Sign up to leave a comment.