removed shit.
This commit is contained in:
1 parent
37e09a0f99
commit
5242d125f8
2 files changed
+28
-95
No files matched your search
@@ -10,34 +10,24 @@ var _ = fmt.Print
|
||||
const initialLength int = 1024
|
||||
const verySmall float64 = -100000
|
||||
const veryBig float64 = 100000
|
||||
const epsilon = 0.00000002
|
||||
|
||||
type Stats struct {
|
||||
Mean float64 `json:"mean"`
|
||||
Var float64 `json:"var"`
|
||||
Std float64 `json:"std"`
|
||||
}
|
||||
|
||||
type StatAggregator struct {
|
||||
sum float64
|
||||
sumOfTheSquares float64
|
||||
n int
|
||||
// histogram is a list of point between [min max] each point in the
|
||||
//histogram represents the beginning of the histogram bars.
|
||||
histogram []float64
|
||||
histogramValues []int
|
||||
histogramBarWidth float64
|
||||
numberOfHistogramBar int
|
||||
min float64
|
||||
max float64
|
||||
}
|
||||
|
||||
type Stats struct{}
|
||||
|
||||
func NewStatAggregator() *StatAggregator {
|
||||
return &StatAggregator{0,
|
||||
0,
|
||||
0,
|
||||
make([]float64, 0, initialLength),
|
||||
make([]int, 0, initialLength),
|
||||
0,
|
||||
initialLength,
|
||||
veryBig,
|
||||
verySmall}
|
||||
return &StatAggregator{0, 0, 0, make([]float64, initialLength), veryBig, verySmall}
|
||||
}
|
||||
|
||||
func (this *StatAggregator) AddStats(dataChannel chan float64, output chan *Stats) {
|
||||
@@ -52,39 +42,15 @@ func (this *StatAggregator) AddStats(dataChannel chan float64, output chan *Stat
|
||||
this.max = datum
|
||||
}
|
||||
}
|
||||
output <- nil
|
||||
output <- this.getFinalStats()
|
||||
}
|
||||
|
||||
// always assume the min and max includes the value!
|
||||
func (this *StatAggregator) AddDataToHistogram(value float64) {
|
||||
if len(this.histogramValues) < this.numberOfHistogramBar {
|
||||
this.AddDataToHistogramWhenLessDataThanBarAreOnHistograms(value)
|
||||
} else {
|
||||
this.AddDataToHistogramWithMaximalNumberOfBars(value)
|
||||
func (this *StatAggregator) getFinalStats() *Stats {
|
||||
stats := new(Stats)
|
||||
stats.Mean = this.sum / float64(this.n)
|
||||
stats.Var = this.sumOfTheSquares/float64(this.n) - stats.Mean*stats.Mean
|
||||
stats.Std = math.Sqrt(stats.Var)
|
||||
|
||||
return stats
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (this *StatAggregator) AddDataToHistogramWithMaximalNumberOfBars(value float64) {
|
||||
}
|
||||
|
||||
func (this *StatAggregator) AddDataToHistogramWhenLessDataThanBarAreOnHistograms(value float64) {
|
||||
for i, v := range this.histogram {
|
||||
if math.Abs(value-v) < epsilon {
|
||||
this.histogramValues[i]++
|
||||
return
|
||||
} else if value < v {
|
||||
this.histogram = append(this.histogram, 0)
|
||||
copy(this.histogram[i+1:], this.histogram[i:])
|
||||
this.histogram[i] = value
|
||||
|
||||
this.histogramValues = append(this.histogramValues, 0)
|
||||
copy(this.histogramValues[i+1:], this.histogramValues[i:])
|
||||
this.histogramValues[i] = 1
|
||||
return
|
||||
}
|
||||
}
|
||||
this.histogramValues = append(this.histogramValues, 1)
|
||||
this.histogram = append(this.histogram, value)
|
||||
}
|
||||
+13
-46
@@ -1,7 +1,6 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -10,11 +9,9 @@ func TestNewStats(t *testing.T) {
|
||||
if s.n != 0 ||
|
||||
s.sum != 0 ||
|
||||
s.sumOfTheSquares != 0 ||
|
||||
s.numberOfHistogramBar != initialLength ||
|
||||
len(s.histogram) != initialLength ||
|
||||
s.min != veryBig ||
|
||||
s.max != verySmall ||
|
||||
len(s.histogram) != 0 ||
|
||||
len(s.histogramValues) != 0 {
|
||||
s.max != verySmall {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
@@ -34,52 +31,22 @@ func TestAddStatsBasic(t *testing.T) {
|
||||
if s.n != 4. || s.min != -1. || s.max != 20. || s.sum != 23. || s.sumOfTheSquares != 411. {
|
||||
t.Error(">>>", s.max, s.min)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestAddDataToHistogramWhenLessDataThanBarAreOnHistograms(t *testing.T) {
|
||||
func TestGetFinalStats(t *testing.T) {
|
||||
s := NewStatAggregator()
|
||||
s.AddDataToHistogramWhenLessDataThanBarAreOnHistograms(17)
|
||||
if !reflect.DeepEqual([]float64{17}, s.histogram) {
|
||||
t.Error("bad histogram", s.histogram)
|
||||
}
|
||||
if !reflect.DeepEqual([]int{1}, s.histogramValues) {
|
||||
t.Error("bad histogramValues:", s.histogramValues)
|
||||
}
|
||||
s.histogram = []float64{-1, 1, 2, 3}
|
||||
s.histogramValues = []int{1, 1, 1, 1}
|
||||
s.AddDataToHistogramWhenLessDataThanBarAreOnHistograms(2)
|
||||
if !reflect.DeepEqual([]int{1, 1, 2, 1}, s.histogramValues) {
|
||||
t.Error("bad histogramValues", s.histogramValues)
|
||||
}
|
||||
|
||||
s.AddDataToHistogramWhenLessDataThanBarAreOnHistograms(2.5)
|
||||
if !reflect.DeepEqual([]float64{-1, 1, 2, 2.5, 3}, s.histogram) {
|
||||
t.Error("bad histogram", s.histogram)
|
||||
}
|
||||
if !reflect.DeepEqual([]int{1, 1, 2, 1, 1}, s.histogramValues) {
|
||||
t.Error("bad histogramValues:", s.histogramValues)
|
||||
}
|
||||
|
||||
s.AddDataToHistogramWhenLessDataThanBarAreOnHistograms(22.5)
|
||||
if !reflect.DeepEqual([]float64{-1, 1, 2, 2.5, 3, 22.5}, s.histogram) {
|
||||
t.Error("bad histogram", s.histogram)
|
||||
}
|
||||
if !reflect.DeepEqual([]int{1, 1, 2, 1, 1, 1}, s.histogramValues) {
|
||||
t.Error("bad histogramValues:", s.histogramValues)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestAddDataToHistogramWithMaximalNumberOfBars(t *testing.T) {
|
||||
s := NewStatAggregator()
|
||||
s.numberOfHistogramBar = 5
|
||||
s.histogram = []float64{1, 2, 3, 4, 5}
|
||||
s.histogramValues = []int{1, 1, 2, 3, 4}
|
||||
s.AddDataToHistogramWithMaximalNumberOfBars(3.5)
|
||||
if !reflect.DeepEqual(s.histogram, []float64{1, 2, 3, 4, 5}) {
|
||||
s.sumOfTheSquares = 5000
|
||||
s.sum = 200
|
||||
s.n = 10
|
||||
stats := s.getFinalStats()
|
||||
if stats.Mean != 20. {
|
||||
t.Fail()
|
||||
}
|
||||
if !reflect.DeepEqual(s.histogramValues, []int{1, 1, 2, 3, 4}) {
|
||||
if stats.Var != 100. {
|
||||
t.Fail()
|
||||
}
|
||||
if stats.Std != 10. {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user