Files
obitools4/pkg/obistats/stats.go

39 lines
617 B
Go
Raw Normal View History

package obistats
import (
"slices"
"golang.org/x/exp/constraints"
)
type Number interface {
constraints.Float | constraints.Integer
}
func Median[T Number](data []T) float64 {
dataCopy := make([]T, len(data))
copy(dataCopy, data)
slices.Sort(dataCopy)
var median float64
l := len(dataCopy)
if l == 0 {
return 0
} else if l%2 == 0 {
median = float64((dataCopy[l/2-1] + dataCopy[l/2]) / 2.0)
} else {
median = float64(dataCopy[l/2])
}
return median
}
func Mean[T Number](data []T) float64 {
var sum float64
for _, v := range data {
sum += float64(v)
}
return sum / float64(len(data))
}