mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
39 lines
617 B
Go
39 lines
617 B
Go
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))
|
|
}
|