У меня проблема с переименованием наборов данных в hdf5. Процесс крайне медленный. Я прочитал некоторую документацию, в которой говорится, что имена наборов данных - это просто ссылки на данные, поэтому приемлемый способ переименования:
group['new_name'] = group['old_name']
del group['old_name']
Но это так медленно (всего 5% завершено за ночь), и это заставляет меня думать, что мой процесс совершенно неправильный.
Я использую Python h5py, и вот мой медленный код:
# Open file
with h5py.File('test.hdf5') as f:
# Get all top level groups
top_keys = [key for key in f.keys()]
# Iterate over each group
for top_key in top_keys:
group = f[top_key]
tot_digits = len(group)
#Rename all datasets in the group (pad with zeros)
for key in tqdm(group.keys()):
new_key = str(key)
while len(new_key)<tot_digits:
new_key = '0'+str(new_key)
group[new_key] = group[key]
del group[key]
В соответствии с предложением @jpp я также попытался заменить последние две строки на group.move
:
group.move(key, new_key)
Но этот метод был одинаково медленным. У меня есть несколько групп с одинаковым количеством наборов данных, но у каждой группы есть наборы данных разного размера. Группа с самыми большими наборами данных (большинство байтов), кажется, переименовывает самую медленную.
Конечно, есть способ сделать это быстро. Является ли имя набора данных просто символической ссылкой? Или переименование по своей сути вызывает переписывание всего набора данных? Как мне переименовать множество наборов данных в файле HDF5?