2016-03-09 41 views
0

我的熵計算方法幾乎每次都會返回正確的數字。但在少數情況下,如列表是{.3333, .3333, .3333, 0, 0}這會返回1.584962500621156,這是不正確的。在奇怪的情況下,我的熵計算方法返回的值大於1。有任何想法嗎?

這裏是我的熵計算器代碼:

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 

所以它看起來像你的代碼做什麼你問它。

+0

我想你是對的。我必須正確計算熵,儘管我從教科書中提取了公式。 –

相關問題