H5PY проблема сохранения составных массивов NumPy - PullRequest
1 голос
/ 25 марта 2019

В попытке провести обратный инжиниринг формата файла, я пришел к следующему минимальному примеру создания составного numpy типа данных и его сохранения в HDF5.Кажется, что в оригинальном файле хранятся наборы данных нижеуказанного типа.Однако, я не могу записать такие наборы данных в файл.

import numpy as np
import h5py

data = ("Many cats".encode(), np.linspace(0, 1, 20))
data_type = [('index', 'S' + str(len(data[0]))), ('values', '<f8', (20,))]

arr = np.array(data, dtype=data_type)
print(arr)

h5f = h5py.File("lol.h5", 'w')
dset = h5f.create_dataset("data", arr, dtype=data_type)
h5f.close()

Этот код вылетает с ошибкой

Traceback (последний вызов был последним): File«test.py», строка 13, в файле dset = h5f.create_dataset (файл «data», arr, dtype = data_type) «/opt/anaconda3/lib/python3.7/site-packages/h5py/_hl/group.py", строка 116, в файле create_dataset dsid = dataset.make_new_dset (файл self, shape, dtype, data, ** kwds)" /opt/anaconda3/lib/python3.7/site-packages/h5py/_hl/dataset.py ", строка 75, в make_new_dset shape = tuple (shape) TypeError: итерация по массиву 0-й

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 25 марта 2019

Я реструктурировал / переупорядочил ваш код, чтобы заставить его работать с h5py.Код ниже работает для 1 строки.Вам нужно будет настроить количество строк как переменную.

import numpy as np
import h5py

data = ("Many cats".encode(), np.linspace(0, 1, 20))
data_type = [('index', 'S' + str(len(data[0]))), ('values', '<f8', (20,))]

arr = np.zeros((1,), dtype=data_type)
arr[0]['index'] = "Many cats".encode()
arr[0]['values'] = np.linspace(0, 1, 20)

h5f = h5py.File("lol.h5", 'w')
dset = h5f.create_dataset("data", data=arr)

h5f.close()
...