Чтение нескольких наборов данных из одной группы в файле h5 с использованием h5py - PullRequest
0 голосов
/ 17 мая 2019

В моем файле h5 есть несколько групп: 'group1', 'group2', ..., и у каждой группы есть 3 разных набора данных: 'dataset1', 'dataset2', 'dataset3', каждый из которых является массивом с числовыми значениями, но размер массива различен.

Моя цель - сохранить каждый набор данных из группы в пустой массив.

Пример:

import h5py
filename = '../Results/someFileName.h5'
data = h5py.File(filename, 'r')

Теперь я могу легко перебирать все группы с помощью

for i in range(len(data.keys())):
    group = list(data.keys())[i]

но я не могу понять, как получить доступ к наборам данных в группе. Поэтому я ищу что-то вроде MATLAB:

hinfo = h5info(filename);
for i = 1:length(hinfo.Groups())
     datasetname = [hinfo.Groups(i).Name '/dataset1'];
     dset = h5read(fn, datasetname);

Где dset теперь массив чисел.

Есть ли способ сделать то же самое с h5py?

1 Ответ

3 голосов
/ 17 мая 2019

У вас правильная идея. Но вам не нужно зацикливаться на range(len(data.keys())). Просто используйте data.keys(); он возвращает итеративный список имен объектов. Попробуйте это:

import h5py
filename = '../Results/someFileName.h5'
data = h5py.File(filename, 'r')
for group in data.keys() :
    print (group)
    for dset in data.[group]keys() :
        print (dset)
        ds_data = h5f[group][dset] # returns HDF5 dataset object
        print (ds_data)
        print (ds_data.shape, ds_data.dtype)
        arr = h5f[group][dset][:] # adding [:] returns a numpy array
        print (arr.shape, arr.dtype)
        print (arr)

Примечание: приведенная выше логика действительна ТОЛЬКО в том случае, если на верхнем уровне есть только группы (без наборов данных). Он не проверяет типы объектов как группы или наборы данных.

Вы также должны расследовать .visititems(). Это будет рекурсивно посещать объекты. Для примера, посмотрите на мой ответ здесь:
Преобразование hdf5 в raw, организованное в папки
Он проверяет количество объектов ниже посещаемого объекта. когда нет подгрупп, это набор данных. А когда есть подгруппы, это группа.

...