滑动平均是趋势拟合的基础方法,也相当于一个滤波器,比如使用九点滑动平均来分析时间序列的年代际变化。 python的常用算法库中并未给出直接计算滑动平均的函数。但是numpy库中给出了一个更加强大更加基础的函数,卷积numpy.convolve()。
1 | numpy.convolve(a, v, mode='full') |
参数:
a:(N,)一维数组
v:(M,)一维数组
mode:{‘full’, ‘valid’, ‘same’}参数可选
‘full’ 默认值,返回每一个卷积值,长度是N+M-1,在卷积的边缘处,信号不重叠,存在边际效应。
‘same’ 返回的数组长度为max(M, N),存在边际效应。
‘valid’ 返回的数组长度为max(M,N)-min(M,N)+1,此时返回的是完全重叠的点。无边际效应。
通俗地讲,a是原始序列,v是卷积核。将上述函数转化为滑动平均的原理,就是设置一个等权重的卷积核,对原始序列进行卷积运算即可。实际上,卷积运算就是滑动平均的推广。
1 | def np_move_avg(a,n,mode): |
参数:
a:(N,)一维数组
n:int型整数,n=9即为9点滑动平均
mode 等同numpy.convolve()中的参数mode
1 | import numpy as np |