Как расширить h5py, чтобы получить доступ к данным в файле hdf5?

У меня есть небольшая программа на Python, которая создает файл hdf5 с помощью модуля h5py. Я хочу написать модуль Python для работы с данными из файла hdf5. Как я мог это сделать?

В частности, я могу установить массивы numpy в PyArrayObject и читать их с помощью PyArg_ParseTuple. Таким образом, я могу читать элементы из массива numpy, когда пишу модуль python. Как читать файлы hdf5, чтобы получить доступ к отдельным элементам?

Обновление: спасибо за ответы ниже. Мне нужно прочитать файл hdf5 с C, а не с Python - я знаю, как это сделать. Например:

import h5py as t
import numpy as np
f=t.File('\tmp\tmp.h5', 'w')
#this file is 2+GB
ofmat=np.load('offsetmatrix.npy')
f['FileDataset']=ofmat
f.close()

Теперь у меня есть файл hdf5 с именем '\ tmp \ tmp.h5'. Что мне нужно сделать, так это прочитать отдельные элементы массива из файла hdf5 с помощью C (а не python), чтобы я мог что-то сделать с этими элементами. Здесь показано, как расширять массивы numpy. Как расширить hdf5?

Изменить: грамматика


person rchhe    schedule 22.03.2011    source источник
comment
Если вы используете PyArrayObject, похоже, что вы используете интерфейс C ... Вы пишете C или python?   -  person Joe Kington    schedule 22.03.2011
comment
Если вы действительно хотите читать файлы HDF5 из кода C, почему бы вам не использовать библиотеку HDF5 C? Это будет намного проще, чем использовать библиотеку, предназначенную для использования из кода Python.   -  person Sven Marnach    schedule 22.03.2011
comment
Спасибо, Свен, это то, что я хочу сделать. Но я хочу написать модуль на Python. Этот модуль выполнит некоторые сложные вычисления (что быстрее в C), а затем вернет результат обратно в скрипт python.   -  person rchhe    schedule 22.03.2011
comment
Вы можете подумать об использовании cython и вызвать низкоуровневые функции C HDF5 для доступа к данным. Или, в качестве альтернативы, вытащите фрагменты данных в массив numpy, а затем выполните вычисления в массиве numpy, используя cython или написав расширение python: scipy.org/Cookbook/C_Extensions/NumPy_arrays   -  person JoshAdel    schedule 23.03.2011
comment
ДжошАдел, я использовал [эту функцию HDFF C] (hdfgroup.org /HDF5/doc/RM/RM_H5F.html#File-Open), чтобы напрямую открыть файл hdf5 и выполнить свои вычисления, которые я затем отправляю обратно на python. Спасибо.   -  person rchhe    schedule 23.03.2011
comment
@rchhe, я пытаюсь сделать то же самое. Был ли у вас хороший опыт использования функций c напрямую?   -  person Onlyjus    schedule 06.09.2012


Ответы (2)


h5py предоставляет вам прямой интерфейс для чтения / записи и управления данными, хранящимися в файле hdf5. Вы смотрели документы?

http://docs.h5py.org/

Советую начать с этих. У них есть довольно наглядные примеры того, как сделать простой доступ к данным. Если есть определенные вещи, которые вы пытаетесь сделать, которые не охватываются методами в h5py, не могли бы вы дать более конкретное описание желаемого использования?

person JoshAdel    schedule 22.03.2011

Если вам действительно не нужна конкретная структура HDF5, но вам просто нужна скорость и кроссплатформенная совместимость, я бы рекомендовал взглянуть на PyTables. Он имеет встроенную возможность чтения и записи массивов Numpy.

person Seth Johnson    schedule 22.03.2011
comment
@ Джош: Я этого не знал. Спасибо, что сказал мне. - person Seth Johnson; 23.03.2011