Files
go-zero/core/mathx/entropy.go

20 lines
308 B
Go
Raw Normal View History

2020-07-26 17:09:05 +08:00
package mathx
import "math"
2020-08-06 23:06:26 +08:00
func CalcEntropy(m map[interface{}]int) float64 {
2020-07-26 17:09:05 +08:00
var entropy float64
2020-08-06 23:06:26 +08:00
var total int
for _, v := range m {
total += v
}
2020-07-26 17:09:05 +08:00
for _, v := range m {
proba := float64(v) / float64(total)
entropy -= proba * math.Log2(proba)
}
return entropy / math.Log2(float64(len(m)))
}