Как получить размеры фрагмента HDF5 в существующем файле?

#c #hdf5

#c #hdf5

Вопрос:

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

Есть ли способ получить размеры фрагмента (а не только общий размер) из существующего набора данных, который мне не хватает?

Комментарии:

1. Я согласен с комментариями ниже. Атрибуты фрагмента доступны в Python (который находится поверх C API). Итак, должен быть способ сделать это в C. Вы спрашивали на форумах HDF Group ? Кто-то там должен быть в состоянии объяснить процедуру.

Ответ №1:

Возможно, вы захотите взглянуть на HDFql, поскольку это (намного) более простой способ манипулировать файлами HDF5, в частности, для получения размеров хранилища (т. Е. Размера фрагмента) определенного набора данных. В качестве примера, если вы хотите получить размеры хранилища набора данных с именем dset , выполните следующие действия:

 SHOW STORAGE DIMENSION dset
  

Дополнительную информацию об этой операции можно найти в разделе 6.7.15 справочного руководства.

Комментарии:

1. Это интересно, но мне бы очень хотелось избежать интеграции другой библиотеки в этот проект, и, честно говоря, эта лицензия пугает меня до чертиков. Кроме того, невозможность для меня самостоятельно скомпилировать библиотеку не является проблемой, поскольку я хочу иметь возможность развертывать код на HPC, который использует свой собственный MPI. Тем не менее, хорошее предложение.

2. Очевидно, что есть способ сделать это в HDF5, поскольку и h5dump, и этот инструмент могут это сделать, но я не смог распутать спагетти h5dump, и этот проект не является открытым исходным кодом.

3. @Laxsnor: согласно справочному руководству, HDFql не поставляет свою собственную библиотеку MPI, а скорее (динамически) загружает ту, которая установлена в среде machine / HPC.