Mercurial > hg > qm-dsp
diff maths/KLDivergence.cpp @ 258:f49be56d3c4e
* Add KL divergence of histograms
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 21 Jan 2008 18:02:47 +0000 |
parents | 43943a4382ef |
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; +} +