Я хочу применить простую функцию к наборам данных, содержащимся в файле hdf5. Я использую код, подобный этому
import h5py
data_sums = []
with h5py.File(input_file, "r") as f:
for (name, data) in f["group"].iteritems():
print name
# data_sums.append(data.sum(1))
data[()] # My goal is similar to the line above but this line is enough
# to replicate the problem
Вначале он идет очень быстро, а после определенного количества, до некоторой степени воспроизводимого набора данных, резко замедляется. Если я прокомментирую последнюю строку, она закончится почти мгновенно. Неважно, сохраняются данные (здесь добавляются к списку) или нет: что-то вроде data[:100] как аналогичный эффект. Количество наборов данных, которые можно обработать до падения производительности, зависит от размера части, доступ к которой осуществляется на каждой итерации. Итерация по более мелким фрагментам не решает проблему.
Я предполагаю, что я заполняю некоторое пространство памяти, и процесс замедляется, когда он заполнен, но я не понимаю, почему.
Как обойти эту проблему производительности?
Я запускаю Python 2.6.5 на Ubuntu 10.04.
Изменить: следующий код не замедляется, если вторая строка цикла не закомментирована. Это замедляет без него
f = h5py.File(path to file, "r")
list_name = f["data"].keys()
f.close()
import numpy as np
for name in list_name:
f = h5py.File(d.storage_path, "r")
# name = list_name[0] # with this line the issue vanishes.
data = f["data"][name]
tag = get_tag(name)
data[:, 1].sum()
print "."
f.close()
Изменить: я обнаружил, что доступ к первому измерению многомерных наборов данных работает без проблем. Проблема возникает, когда задействованы более высокие измерения.