我想计算增加的移动平均值。
我的主要目标是获得增加的移动平均值,使得第一个移动平均值是第一个值的平均值,第二个移动平均值是前两个值的平均值,第三个移动平均值是前四个值的平均值,第四个移动平均值是前六个值的平均值,依此类推。
如何使用Python中的numpy库来实现这一点?
我正在使用Python对时间序列数据进行分析。我对移动平均值也很感兴趣,为了计算目标变量的移动平均值,我使用了以下函数来计算目标变量的MA。
def movingaverage(values, avg_number): weights = np.repeat(1.0, avg_number)/avg_number smas = np.convolve(values, weights, 'valid') return smas
在这个函数中,我提供了我的pandas序列和用于计算相应平均值的平均数。
现在,我想计算增加的移动平均值。如上所述,平均值是在固定数量上计算的,比如90。
但在减少/增加的移动平均值的情况下,这个数字会在每个下一个值处减少/增加。
我的主要目标是获得增加的移动平均值,使得第一个移动平均值是第一个值的平均值,第二个移动平均值是前两个值的平均值,第三个移动平均值是前四个值的平均值,第四个移动平均值是前六个值的平均值,依此类推。
如何使用Python中的numpy库来实现这一点?
如果输入是[1,5,3,6,8,4,6,8,4,2,3,5,8,6,4]
,输出将是增加的移动平均值,如[1,3,3,3.75....]
回答:
你可以使用cumsum
和np.arange
,例如
x = np.array([1,5,3,6,8,4,6,8,4,2,3,5,8,6,4])y = x.cumsum()/np.arange(1,len(x)+1)
输出:
array([ 1. , 3. , 3. , 3.75 , 4.6 , 4.5 , 4.71428571, 5.125 , 5. , 4.7 , 4.54545455, 4.58333333, 4.84615385, 4.92857143, 4.86666667])