mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
First version of obicleandb...
Former-commit-id: e60b61d015abbf029a555b51de99b4252c50ab59
This commit is contained in:
38
pkg/obistats/stats.go
Normal file
38
pkg/obistats/stats.go
Normal file
@ -0,0 +1,38 @@
|
||||
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))
|
||||
}
|
Reference in New Issue
Block a user