извлечение данных из набора данных HDF5 - PullRequest
0 голосов
/ 09 марта 2020

У меня есть файл мата, который я читаю с помощью h5py, мне нужно извлечь данные из файла nn.arrays или другую форму для их анализа и построить график.

in: data   = h5py.File('footprints/HuascoFP.mat','r')

FP     = data["FP"]
FP.keys() # ---> ['EC', 'LAS', 'MWS', 'OMS', 'datenumber', 'meteo']
OMS    = FP["OMS"]
OMS.keys() #----> ['fp1D', 'fp2D', 'posR', 'posT']
fp2d   = OMS["fp2D"]#----> ['FP', 'x', 'y']
FP     =fp2d["FP"]
print(FP)

out:<HDF5 dataset "FP": shape (475, 1), type "|O">'

Если я попробую «FP [: 2]», я получу: ([[], []], dtype = object) без каких-либо данных.

Вам нужна помощь, ребята

1 Ответ

0 голосов
/ 10 марта 2020

Я собирался написать как комментарий, но это слишком долго. Вот ссылка на мой ответ:
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, чтобы «увидеть», что происходит. Так намного проще понять.

...