go(stats): actually calculate median
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
988c20885e
commit
71e67bdb58
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
|
||||||
"git.dotya.ml/wanderer/math-optim/report"
|
"git.dotya.ml/wanderer/math-optim/report"
|
||||||
"gonum.org/v1/gonum/floats"
|
"gonum.org/v1/gonum/floats"
|
||||||
|
@ -97,8 +98,29 @@ func statsFromBest(best []float64) []float64 {
|
||||||
s[0] = floats.Min(best)
|
s[0] = floats.Min(best)
|
||||||
s[1] = floats.Max(best)
|
s[1] = floats.Max(best)
|
||||||
s[2] = stat.Mean(best, nil)
|
s[2] = stat.Mean(best, nil)
|
||||||
s[3] = stat.Mean(best, nil)
|
s[3] = median(best)
|
||||||
s[4] = stat.StdDev(best, nil)
|
s[4] = stat.StdDev(best, nil)
|
||||||
|
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// as per https://gosamples.dev/calculate-median/.
|
||||||
|
func median(data []float64) float64 {
|
||||||
|
dataCopy := make([]float64, len(data))
|
||||||
|
copy(dataCopy, data)
|
||||||
|
|
||||||
|
sort.Float64s(dataCopy)
|
||||||
|
|
||||||
|
var median float64
|
||||||
|
|
||||||
|
//nolint: gocritic
|
||||||
|
if l := len(dataCopy); l == 0 {
|
||||||
|
return 0
|
||||||
|
} else if l%2 == 0 {
|
||||||
|
median = (dataCopy[l/2-1] + dataCopy[l/2]) / 2
|
||||||
|
} else {
|
||||||
|
median = dataCopy[l/2]
|
||||||
|
}
|
||||||
|
|
||||||
|
return median
|
||||||
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ func TestParseBenchStats(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
wantResults := []float64{1336.3261400058473, 2169.7378893600176, 1737.765688971335, 1737.765688971335, 342.37072192259393}
|
wantResults := []float64{1336.3261400058473, 2169.7378893600176, 1737.765688971335, 1722.4993632597375, 342.37072192259393}
|
||||||
want := report.Row{
|
want := report.Row{
|
||||||
Title: "D=5, f=De Jong 5th, G=3, I=4",
|
Title: "D=5, f=De Jong 5th, G=3, I=4",
|
||||||
Values: wantResults,
|
Values: wantResults,
|
||||||
|
|
Loading…
Reference in New Issue