移动平均数
mvgavg的Python项目详细描述
为什么??
到目前为止,numpy还没有内置移动平均值函数。 大多数解决方案都是乏味而复杂的。这个解决方案非常好。 它的操作类似于wolfram语言的movingaverage[]函数,但是 其优点是它可以指定轴(WordfRAM与 F[Y]和A//@ 无关。 但这是另一个故事)。
用法
有关示例,请参见文档。但实际上,它的用法是:
from mvgavg import mvgavg mvgavg(array, n, axis=0, weights = [list of weights]) mvgavg(array, n, axis=0, binning = bool)
此代码的作用
考虑数组[a,b,c,d,…x,y,z]。取移动平均值
长度n=3产生一个新数组,其中第一个元素是(a+b+c)/3
第二个(b+c+d)/3等。这可以对任意深度的阵列进行,
所以如果你把时间序列放入
沿着
输出是一个大小和形状相同但已缩短的矢量
在
轴:轴允许操作深度增加,因此使用< CIT>轴= 1 参数,您可以使用移动平均值水平跨列操作。 你可以像数组本身那样做。
权重允许您自定义函数。默认权重(无)为 如上所述(所有值的权重相同)。另一个重量 您可以使用is'pascal'。这给出了n行帕斯卡三角形的权重, 例如,对于n=5,数组中带有项的是 (i+4j+6k+4l+m)/16,因为帕斯卡三角形中的第五条线是 [1,4,6,4,1]。其他默认权重选项是三角形(即 三角形(5)=[1,2,3,2,1],二次方是三角形的平方。或者自己做 列出你想要的东西并放在这里(确保len(weights)==n)
装箱
binning大大缩短了数组的长度,并损失了一些精度。这是可取的 如果你有大量的数据,不需要保存每一点。这个 默认移动平均线和组合移动平均线的区别在于, 对于输入数组[abcdef…]和输出数组[abcdef…] 3,默认移动平均值如下:
A = [a b c]/3 B = [b c d]/3 C = [c d e]/3 D = [d e f]/3 E = [e f g]/3 ....
但如果binning=true:
A = [a b c]/3 B = [d e f]/3 C = [g h i]/3 .....
如您所见,输出数组大大缩短。随着阵列变得越来越大, binning可以更快地计算数量级,如果您不需要 移动平均线的分辨率是处理数据的一种更有效的方法, 因为你可能会在以后绘图时把大部分数据扔掉 不管怎么说。
为什么这个功能很重要?
移动平均线平滑了数据,并阐明了否则可能不会 很明显。当x不同时,它们也有助于反向插值 产生相同的y。使用移动平均数的原因有很多,所以a 任意速度任意深度移动平均函数 需要写权重。
致谢
github上@fnjn的滑动窗口功能。
其他
如果您有问题,请在github上打开一个问题 https://github.com/NGeorgescu/python-moving-average或者如果你认为 您希望看到的功能,或者如果您有更快的算法
谢谢,祝你愉快!