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)) }