00001 #ifndef Impala_Core_Histogram_Entropy_h
00002 #define Impala_Core_Histogram_Entropy_h
00003
00004 #include "Core/Histogram/Histogram1dTem.h"
00005 #include <math.h>
00006
00007 namespace Impala
00008 {
00009 namespace Core
00010 {
00011 namespace Histogram
00012 {
00013
00014
00015
00016
00017 double
00018 Entropy(const Histogram::Histogram1dTem<int>* hist)
00019 {
00020 const double cLog2 = log(2.);
00021 double sum = hist->TotalWeight();
00022 if(sum == 0)
00023 return 0.;
00024 double e=0;
00025 for(int i=0 ; i<hist->Size() ; ++i)
00026 {
00027 double d = hist->Elem(i);
00028 if(d>0)
00029 {
00030 d /= sum;
00031 e -= d * (log(d)/cLog2);
00032 }
00033 }
00034 return e;
00035 }
00036
00037 }
00038 }
00039 }
00040
00041 #endif