You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

25 lines
412 B

12 months ago
package mathx
import "math"
const epsilon = 1e-6
func CalcEntropy(m map[any]int) float64 {
if len(m) == 0 || len(m) == 1 {
return 1
}
var entropy float64
var total int
for _, v := range m {
total += v
}
for _, v := range m {
probe := float64(v) / float64(total)
if probe < epsilon {
probe = epsilon
}
entropy -= probe * math.Log2(probe)
}
return entropy / math.Log2(float64(len(m)))
}