У меня очень большой числовой массив (1 миллион целых чисел).Я использую np.convolve, чтобы найти «самую плотную» область этого массива.Под областью «desnsest» я подразумеваю окно фиксированной длины, которое имеет наибольшее число при суммировании окна.Позвольте мне показать вам код:
import numpy as np
example = np.array([0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0])
window_size = 10
density = np.convolve(example, np.ones([window_size]), mode='valid')
print(density)
# [7.0, 7.0, 8.0, 9.0, 9.0, 9.0, 8.0, 7.0, 6.0, 6.0, 5.0, 5.0, 5.0, 5.0, 4.0, 4.0, 4.0, 4.0, 4.0, 3.0, 3.0, 4.0, 3.0]
Затем я могу использовать np.argmax(density)
, чтобы получить начальный индекс области с наивысшей плотностью 3
.
В любом случае, в этом примере он работаетбыстро.но при свертывании более миллиона элементов массива с размером окна 10 000 требуется 2 секунды.если я выберу размер windows_size 500 000, потребуется 3 минуты.
Есть ли лучший способ суммировать массив с определенным размером окна, чтобы ускорить это?Если бы я вместо этого превратил это в серию панд, я мог бы использовать что-то там?
Спасибо за вашу помощь!