00001 #ifndef Impala_Core_Vector_KullbackDivergence_h
00002 #define Impala_Core_Vector_KullbackDivergence_h
00003
00004 #include "Core/Vector/VectorTem.h"
00005
00006 namespace Impala
00007 {
00008 namespace Core
00009 {
00010 namespace Vector
00011 {
00012
00014 template <class ElemT>
00015 inline ElemT
00016 KullbackDivergence(const VectorTem<ElemT>& v1, const VectorTem<ElemT>& v2)
00017 {
00018 ElemT score = 0;
00019 for (int i=0 ; i<v1.Size() ; i++)
00020 if((v2[i]!=0)&&(v1[i]!=0))
00021 score += v1[i]*log(v1[i]/v2[i]);
00022 return score;
00023 }
00024
00026 template <class ElemT>
00027 class KullbackDivergenceFtor
00028 {
00029 public:
00030
00031 ElemT
00032 DoIt(const VectorTem<ElemT>& v1, const VectorTem<ElemT>& v2)
00033 {
00034 ElemT score = 0;
00035 for (int i=0 ; i<v1.Size() ; i++)
00036 if((v2[i]!=0)&&(v1[i]!=0))
00037 score += v1[i]*log(v1[i]/v2[i]);
00038 return score;
00039 }
00040 };
00041
00042
00043 }
00044 }
00045 }
00046
00047 #endif