diff maths/KLDivergence.cpp @ 33:499d438b52ba

* Add KL divergence of histograms
author cannam
date Mon, 21 Jan 2008 18:02:47 +0000
parents dfe38135e4c7
children 769da847732b
line wrap: on
line diff
--- a/maths/KLDivergence.cpp	Fri Jan 18 17:57:40 2008 +0000
+++ b/maths/KLDivergence.cpp	Mon Jan 21 18:02:47 2008 +0000
@@ -10,10 +10,12 @@
 
 #include "KLDivergence.h"
 
-double KLDivergence::distance(const vector<double> &m1,
-			      const vector<double> &v1,
-			      const vector<double> &m2,
-			      const vector<double> &v2)
+#include <cmath>
+
+double KLDivergence::distanceGaussian(const vector<double> &m1,
+                                      const vector<double> &v1,
+                                      const vector<double> &m2,
+                                      const vector<double> &v2)
 {
     int sz = m1.size();
 
@@ -28,3 +30,24 @@
 
     return d;
 }
+
+double KLDivergence::distanceDistribution(const vector<double> &d1,
+                                          const vector<double> &d2,
+                                          bool symmetrised)
+{
+    int sz = d1.size();
+
+    double d = 0;
+    double small = 1e-20;
+    
+    for (int i = 0; i < sz; ++i) {
+        d += d1[i] * log10((d1[i] + small) / (d2[i] + small));
+    }
+
+    if (symmetrised) {
+        d += distanceDistribution(d2, d1, false);
+    }
+
+    return d;
+}
+