Вопрос

Когда я использовал Numpy, я сохранил его данные в родном формате * .npy. Это очень быстро и дало мне несколько преимуществ, как этот

  • Я мог бы прочитать * .NPY из C-кода C как простые двоичные данные (я имею в виду * .NPY - это BINIANA - совместимо со структурами C)

Теперь я имею дело с HDF5 (Pytables в этот момент). Как я читал в руководстве, они используют Numpy Serializer для хранения Numpy Data, поэтому я могу прочитать эти данные из C как из простых * .ny файлов?

NAMPY HDF5 - совместимо только со структурами C Cronture?

UPD:

У меня чтение клиента MatLab Client от HDF5, но не хочу читать HDF5 от C ++, потому что чтение двоичных данных из * .npy - это раз быстрее, поэтому мне действительно нуждается в чтении HDF5 от C ++ (двоичная совместимость), так что я Уже использует два способа передачи данных - * .NPY (читается от C ++ в качестве байтов, из Python внасолочен) и HDF5 (доступ от MATLAB), и если это возможно, хотите использовать единственный путь - HDF5, но чтобы сделать это у меня есть Чтобы найти способ сделать HDF5 Binary-совместимо со структурами C ++, пожалуйста, помогите, если есть возможность отключать сжатие в HDF5 или что-то еще, чтобы сделать HDF5 Binary-совместимо со структурами C ++ - подскажите, где я могу прочитать об этом ...

Это было полезно?

Решение

Я чувствую твою боль. Я широко имел дело с огромным количеством данных, хранящихся в форматах HDF5, и я почерпировал несколько битов информации, которые вы можете найти полезной.

Если вы находитесь в «Control» создания файлов (и написание данных - даже если вы используете API), вы должны быть в состоянии во многом полностью обходить библиотеки HDF5.

Если вы наборы выходных наборов не ограничены, они будут написаны непрерывно. До тех пор, пока вы не указываете какие-либо преобразования байта-заказа в определениях данных данных (т.е. вы указываете, что данные должны быть записаны в родном формате Float / Double / Integer), вы должны иметь возможность достичь «двойной совместимости», как вы поставили Это.

Чтобы решить мою проблему, я написал файловый анализатор HDF5, используя спецификацию файла http://www.hdfgroup.org/hdf5/doc/h5.format.html.

С довольно простым парсером вы сможете определить смещение (и размер) любого набора данных. В этот момент просто Fveek и Fread (в C, то есть, возможно, есть подход более высокого уровня, который вы можете взять в C ++).

Если ваши наборы набора данных разбиваются, то для перемещения B-деревьев необходимо больше расставаний, используемых для организации кусков.

Единственным другим выпуском, вы должны знать, является обработкой любых (или устранения) любая зависимая зависимая от прокладки структуры системы.

Другие советы

Правильный способ прочитать файлы HDF5 из C - использовать API HDF5 - см. руководство. Отказ В основном можно напрямую прочитать необработанные данные из файла HDF5, поскольку вы будете с файлом .npy, предполагая, что вы не использовали расширенные параметры хранения, такие как сжатие в вашем файле HDF5. Однако это, по сути, имеет значение всей точки использования формата HDF5, и я не могу подумать о каком-либо преимуществе для выполнения этого вместо того, чтобы использовать правильный API HDF5. Также обратите внимание, что API имеет Упрощенный высокий уровень версии который должен сделать чтение от C относительно безболезненно.

HDF5 заботится о бинарной совместимости структур для вас. Вам просто нужно сказать, что состоит из ваших структуров (DTYPE), и у вас нет проблем с сохранением / чтением массивов записи - это потому, что система типа в основном 1: 1 между Numpy и HDF5. Если вы используете H5PY, я уверен, что IO должен быть достаточно быстрым при условии, что вы используете все родные типы и большие дозированные читания / пишеты - весь набор данных допустимого. После этого это зависит от хвалирования и каких фильтров (например, перемешиваний, сжатие) - также стоит отметить иногда, которые могут ускорить, значительно снижая размер файла, поэтому всегда смотрите на тесты. Обратите внимание, что выбор типа и фильтра выполнен в конце создания документа HDF5.

Если вы пытаетесь проанализировать HDF5 сами, вы делаете это неправильно. Используйте API C ++ и C, если вы работаете в C ++ / C. Существуют примеры так называемых «составных типов» на веб-сайте групп HDF5.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top