numpy에서 convolve 함수를 사용하는 이동 평균 함수를 작성했습니다. 이는 (weighted moving average)과 동일해야합니다. 나의 무게 (간단한 산수 평균으로) 모두 동일 할 때, 그것을 잘 작동합니다 :numpy.convolve를 사용하는 가중 이동 평균
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])
'유효한'플래그를 제거하면 올바른 값이 표시되지 않습니다. 나는 코드 클리너 (동일한 코드, 다른 가중치)를 만드는 것처럼 WMA와 MA에 대해 convolve를 사용하고 싶습니다. 그렇지 않으면 모든 데이터를 반복하여 조각을 가져와야 할 것입니다.
이 동작에 대한 아이디어가 있습니까?
감사합니다. 또한 [:: - 1]이 배열/목록을 뒤집을 것임을 알지 못했습니다. 그것은 매우 유용한 정보입니다! –
단순한 논평으로'np.cumsum (np.ones (numdays, dtype = float), axis = 0)'은'np.arange (numdays) + 1.' 또는'np.np .arange (1., numdays + 1.)'. –