RobinUS2/golang-moving-average

GitHub: RobinUS2/golang-moving-average

一个 Go 语言的滑动平均实现,支持固定窗口内的均值、最值计算与并发安全封装。

Stars: 44 | Forks: 12

# golang-moving-average [![Build Status](https://travis-ci.org/RobinUS2/golang-moving-average.svg?branch=master)](https://travis-ci.org/RobinUS2/golang-moving-average) Go 的移动平均(Moving average)实现。查看[文档](https://godoc.org/github.com/RobinUS2/golang-moving-average)。 ## 用法 ``` import "github.com/RobinUS2/golang-moving-average" ma := movingaverage.New(5) // 5 is the window size ma.Add(10) ma.Add(15) ma.Add(20) ma.Add(1) ma.Add(1) ma.Add(5) // This one will effectively overwrite the first value (10 in this example) avg := ma.Avg() // Will return 8.4 ``` ## 并发 默认情况下,该库不是线程安全的。不过,可以以线程安全的方式封装该对象,使其能够 在多个 routine 中并发使用: ``` ma := movingaverage.Concurrent(movingaverage.New(5)) // concurrent safe version ma.Add(10) avg := ma.Avg() // Will return 10.0 ``` ## 最小值/最大值/计数 支持以下基本操作: ``` ma := movingaverage.New(5) // 5 is the window size min, err := ma.Min() // min will return lowest value, error is set if there's no values yet max, err := ma.Max() // max will return highest value, error is set if there's no values yet count := ma.Count() // count will return number of filled slots ``` ## 部分使用的窗口 假设你定义了一个大小为 5 的窗口,并且只放入了 2 个值,那么平均值将基于这 2 个值来计算。 窗口大小 5 - 值:2, 2 - 平均值:2(而不是 0.8)
标签:EVTX分析, Go, Ruby工具, 数学计算, 日志审计, 滑动平均, 统计算法