Я собирался написать как комментарий, но это слишком долго. Вот ссылка на мой ответ:
SO_55566865: разница между двумя способами доступа к группе hdf5
Это долго. В первой части показано, как разыменовать HDF5 «Ссылки на объекты». (Остальная часть ответа задается c для набора данных SVHN.)
Я постараюсь применить к вашему примеру. (Я думаю, что понял это правильно, но могут быть ошибки, поскольку я не могу проверить ваши данные.)
data
в вашем коде ссылается на объект файла.
FP = data["FP"]
ссылается на группу верхнего уровня называется "FP" и так далее.
Объединяя все имена групп и наборов данных, ваша ссылка на объект находится здесь: (Я изменил имя, чтобы избежать конфликтов с первым значением 'FP')
FP_arr = data["/FP/OMS/fp2D"]["FP"]
Метод 1 в моем примере показывает, как получить объект ссылки. То, что вы делаете от этого, зависит от данных, которые вы найдете.
fp2d["FP"] or data["/FP/OMS/fp2D"]["FP"]
- массив ссылок на объекты. Объедините ссылку на объект с объектом файла, чтобы получить следующий объект. Таким образом, используя ваше имя:
obj_ref=fp2d["FP"][0][0]
является первой ссылкой на объект.
data[ fp2d["FP"][0][0] ]
или data[obj_ref]
возвращает первый объект.
Вы можете напечатать путь к этому объекту с помощью .name
атрибут. Для объекта выше:
obj_ref_name = data[obj_ref].name
print( obj_ref_name )
Вы можете увидеть, как это работает, сравнив 3 способа доступа к указанному объекту. Следующие строки указывают на один и тот же объект и должны выдавать тот же результат:
data[ fp2d["FP"][0][0] ]
data[obj_ref]
data[obj_ref_name]
Затем вы можете использовать это для продолжения опроса data.
Примечание: ссылки на объекты сложны. Когда я впервые начал работать с ними, я открыл файл HDF5 с помощью HDFView, чтобы «увидеть», что происходит. Так намного проще понять.