我的熵计算方法在奇怪的情况下返回大于1的值。有任何想法吗?

时间:2016-03-09 03:16:42

标签: java

我的熵计算方法几乎每次都返回正确的数字。但在少数情况下,如果列表为{.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);
}

1 个答案:

答案 0 :(得分:2)

考虑

let a = log2(.3333) --> -1.5851
let b = a * .3333   --> -0.5823

0 - b - b - b - 0 - 0 = 1.584962500621156

所以看起来你的代码完全符合你的要求。