public double iEntropyDS(int[][] dataSource, int from, int to)
{
double e = 0.0;
double col = dataSource.length;
double row = dataSource[0].length;
double totalElement = col * row;
int totalNum = to - from + 1;
System.out.println("Max Entropy:" + Math.log((double)totalNum));
int[][] appear = new int[totalNum][2];
int c = 0;
for(int i=0;i<totalNum;i++)
{
int current = i + from;
appear[i][0] = current;
for(int j=0;j<col;j++)
{
for(int k=0;k<row;k++)
{
if(dataSource[j][k] == current)
c ++;
}
}
appear[i][1] = c;
c = 0;
}
// calc unit entropy
double prob = 0.0;
double logeProb = 0.0;
for(int i=0;i<totalNum;i++)
{
prob = (double)appear[i][1] / (double) totalElement;
//System.out.println("Prob of "+appear[i][0] + ":" + prob);
// calc natural log
if(prob != 0)
logeProb = Math.log(prob);
//calc entropy
e += -(prob * logeProb);
logeProb = 0.0;
prob = 0.0;
}
return e;
}
http://en.wikipedia.org/wiki/Entropy_%28information_theory%29