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.
24 lines
412 B
24 lines
412 B
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))) |
|
}
|
|
|