RobinUS2/golang-moving-average
GitHub: RobinUS2/golang-moving-average
一个 Go 语言的滑动平均实现,支持固定窗口内的均值、最值计算与并发安全封装。
Stars: 44 | Forks: 12
# golang-moving-average [](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工具, 数学计算, 日志审计, 滑动平均, 统计算法