我的熵计算方法几乎每次都返回正确的数字。但在少数情况下,如果列表为{.3333, .3333, .3333, 0, 0}
,则返回1.584962500621156
,这是不正确的。
以下是我的熵计算器的代码:
private double calcEntropySimple(double[] list){
// Calculate entropy
double entropy = 0;
for (int i = 0; i < list.length; i++) {
if(Double.isNaN(list[i])){
list[i] = 0;
}
if (list[i] > 0) {
entropy -= list[i] * log2(list[i]);
}
}
return entropy;
}
和我的log2()
方法:
private static double log2 (double x) {
return (Math.log(x)/Math.log(2)+1e-10);
}
答案 0 :(得分:2)
考虑
let a = log2(.3333) --> -1.5851
let b = a * .3333 --> -0.5823
0 - b - b - b - 0 - 0 = 1.584962500621156
所以看起来你的代码完全符合你的要求。