Mercurial > hg > qm-dsp
comparison maths/KLDivergence.cpp @ 74:769da847732b
* A few fixes prompted by vamp-plugin-tester
author | cannam |
---|---|
date | Mon, 08 Jun 2009 12:30:20 +0000 |
parents | 499d438b52ba |
children | e5907ae6de17 |
comparison
equal
deleted
inserted
replaced
73:dcb555b90924 | 74:769da847732b |
---|---|
18 const vector<double> &v2) | 18 const vector<double> &v2) |
19 { | 19 { |
20 int sz = m1.size(); | 20 int sz = m1.size(); |
21 | 21 |
22 double d = -2.0 * sz; | 22 double d = -2.0 * sz; |
23 double small = 1e-20; | |
23 | 24 |
24 for (int k = 0; k < sz; ++k) { | 25 for (int k = 0; k < sz; ++k) { |
25 d += v1[k] / v2[k] + v2[k] / v1[k]; | 26 |
26 d += (m1[k] - m2[k]) * (1.0 / v1[k] + 1.0 / v2[k]) * (m1[k] - m2[k]); | 27 double kv1 = v1[k] + small; |
28 double kv2 = v2[k] + small; | |
29 double km = (m1[k] - m2[k]) + small; | |
30 | |
31 d += kv1 / kv2 + kv2 / kv1; | |
32 d += km * (1.0 / kv1 + 1.0 / kv2) * km; | |
27 } | 33 } |
28 | 34 |
29 d /= 2.0; | 35 d /= 2.0; |
30 | 36 |
31 return d; | 37 return d; |