Вы пробовали профилировать код, скажем, с %prun
или %lprun
в ipython? Это точно скажет вам, где происходят ваши замедления.
Я не могу сделать свою собственную версию этого без стека tif, но я подозреваю, что проблема в том, что вы используете списки для хранения всего. Каждый раз, когда вы делаете добавление или расширение, python вынужден выделять больше памяти. Вы можете сначала попытаться получить общее количество максимумов, затем распределить выходные массивы, а затем выполнить повторный запуск, чтобы заполнить массивы. Что-то вроде ниже
# run through once to get the count of local maxima
npeaks = (len(peak_local_max(f, min_distance=8, threshold_abs=3000))
for f in images[0])
total_peaks = sum(npeaks)
# allocate storage arrays and rerun
x = np.zeros(total_peaks, np.float)
y = np.zeros_like(x)
int_liposome = np.zeros_like(x)
BG_liposome = np.zeros_like(x)
frame_list = np.zeros(total_peaks, np.int)
index_0 = 0
for frame_ind, tmp_frame in enumerate(images[0]):
peaks = pd.DataFrame(peak_local_max(tmp_frame, min_distance=8,threshold_abs=3000))
index_1 = index_0 + len(peaks)
# copy the data from the DataFrame's underlying numpy array
x[index_0:index_1] = peaks[0].values
y[index_0:index_1] = peaks[1].values
for i, peak in enumerate(peaks, index_0):
int_liposome[i] = cmask(peak, tmp_frame)
frame_list[index_0:index_1] = frame_ind
# update the starting index
index_0 = index_1
print "Frame: ", frame_ind, "of ",len(images[0])