У меня есть h5py-набор данных, как показано ниже. Я хочу индексировать записи по строкам, а не по числовому значению. Так, например, Я мог бы получить значение первой записи на dset[dset.attrs['id1']]
.H5PY Writes Very Slow
Я пытаюсь написать атрибуты с помощью кода ниже, но он очень медленный. Если я делаю %timeit dset.attrs[rid] = idx
в цикле, одна запись составляет около 310 мс. Строки, которые я пишу, - 36 символов. У меня около 100 тыс. Записей, которые мне нужно написать, что займет около 9 часов. Что-то должно быть ужасно неправильно? Также процессор привязан.
ids = ['id1', 'id2', 'id3']
h5 = h5py.File("/tmp/ds.h5", "w")
dset = h5.create_dataset("lds", (100000,), dtype='float32')
for idx, id in enumerate(ids): # loop takes forever
dset.attrs[id] = idx # takes about ~310ms
EDIT
Minimal пример "работает".
for idx, rid in enumerate(range(10)):
%timeit dset.attrs[str(rid)] = idx
10 loops, best of 3: 470 ms per loop
10 loops, best of 3: 470 ms per loop
...
Почти 0,5 секунды для разовой записи.
Какую версию h5py вы используете? –
h5py.version.api_version is 1,8 Код тот же, за исключением того, что 'ids' - это заданный объект, содержащий все строки id. –
Какова ваша 'h5py.version.version'? –