Java examples for java.lang:Math Function
Returns the Jensen-Shannon divergence.
//package com.java2s; public class Main { public static final double log2 = Math.log(2); /**//from ww w. ja v a 2 s . co m * Returns the Jensen-Shannon divergence. */ public static double jensenShannonDivergence(double[] p1, double[] p2) { assert (p1.length == p2.length); double[] average = new double[p1.length]; for (int i = 0; i < p1.length; ++i) { average[i] += (p1[i] + p2[i]) / 2; } return (klDivergence(p1, average) + klDivergence(p2, average)) / 2; } /** * Returns the KL divergence, K(p1 || p2). * * The log is w.r.t. base 2. <p> * * *Note*: If any value in <tt>p2</tt> is <tt>0.0</tt> then the KL-divergence * is <tt>infinite</tt>. * */ public static double klDivergence(double[] p1, double[] p2) { assert (p1.length == p2.length); double klDiv = 0.0; for (int i = 0; i < p1.length; ++i) { if (p1[i] == 0) { continue; } if (p2[i] == 0) { return Double.POSITIVE_INFINITY; } klDiv += p1[i] * Math.log(p1[i] / p2[i]); } return klDiv / log2; // moved this division out of the loop -DM } }