взвешенная скользящая средняя с numpy.convolve
Я пишу функцию скользящего среднего, которая использует функцию свертки в numpy, которая должна быть эквивалентна (взвешенное скользящее среднее). Когда все мои веса равны (как в простом среднем арифметическом), все работает нормально:
data = numpy.arange(1,11)
numdays = 5
w = [1.0/numdays]*numdays
numpy.convolve(data,w,'valid')
дает
array([ 3., 4., 5., 6., 7., 8.])
Тем не менее, когда я пытаюсь использовать средневзвешенное
w = numpy.cumsum(numpy.ones(numdays,dtype=float),axis=0); w = w/numpy.sum(w)
вместо (для тех же данных) 3,667,4,667,5,667,6,667, ... Я ожидаю, я получаю
array([ 2.33333333, 3.33333333, 4.33333333, 5.33333333, 6.33333333,
7.33333333])
Если я удалю «действительный» флаг, я даже не вижу правильные значения. Я действительно хотел бы использовать Convolve для WMA, а также MA, так как это делает код чище (тот же код, разные веса), и в противном случае я думаю, что мне придется циклически проходить по всем данным и брать фрагменты.
Есть идеи об этом поведении?