Codebase list golang-github-vbauerster-mpb / ae85987
rename for consistency sake Vladimir Bauer 6 years ago
2 changed file(s) with 40 addition(s) and 40 deletion(s). Raw diff Collapse all Expand all
+0
-40
decor/moving-average.go less more
0 package decor
1
2 import (
3 "sort"
4
5 "github.com/VividCortex/ewma"
6 )
7
8 // MovingAverage is the interface that computes a moving average over
9 // a time-series stream of numbers. The average may be over a window
10 // or exponentially decaying.
11 type MovingAverage = ewma.MovingAverage
12
13 type medianWindow [3]float64
14
15 func (s *medianWindow) Len() int { return len(s) }
16 func (s *medianWindow) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
17 func (s *medianWindow) Less(i, j int) bool { return s[i] < s[j] }
18
19 func (s *medianWindow) Add(value float64) {
20 s[0], s[1] = s[1], s[2]
21 s[2] = value
22 }
23
24 func (s *medianWindow) Value() float64 {
25 tmp := *s
26 sort.Sort(&tmp)
27 return tmp[1]
28 }
29
30 func (s *medianWindow) Set(value float64) {
31 for i := 0; i < len(s); i++ {
32 s[i] = value
33 }
34 }
35
36 // NewMedian is fixed last 3 samples median MovingAverage.
37 func NewMedian() MovingAverage {
38 return new(medianWindow)
39 }
0 package decor
1
2 import (
3 "sort"
4
5 "github.com/VividCortex/ewma"
6 )
7
8 // MovingAverage is the interface that computes a moving average over
9 // a time-series stream of numbers. The average may be over a window
10 // or exponentially decaying.
11 type MovingAverage = ewma.MovingAverage
12
13 type medianWindow [3]float64
14
15 func (s *medianWindow) Len() int { return len(s) }
16 func (s *medianWindow) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
17 func (s *medianWindow) Less(i, j int) bool { return s[i] < s[j] }
18
19 func (s *medianWindow) Add(value float64) {
20 s[0], s[1] = s[1], s[2]
21 s[2] = value
22 }
23
24 func (s *medianWindow) Value() float64 {
25 tmp := *s
26 sort.Sort(&tmp)
27 return tmp[1]
28 }
29
30 func (s *medianWindow) Set(value float64) {
31 for i := 0; i < len(s); i++ {
32 s[i] = value
33 }
34 }
35
36 // NewMedian is fixed last 3 samples median MovingAverage.
37 func NewMedian() MovingAverage {
38 return new(medianWindow)
39 }