public static double LogProb(this Mixture <VectorGaussian> mixture, MicrosoftResearch.Infer.Maths.Vector what) { double sum = 0; for (int i = 0; i < mixture.Components.Count; ++i) { MicrosoftResearch.Infer.Maths.Vector mean = mixture.Components[i].GetMean(); MicrosoftResearch.Infer.Maths.Vector diff = what - mean; PositiveDefiniteMatrix precision = mixture.Components[i].Precision; double prob = Math.Exp(-0.5 * precision.QuadraticForm(diff, diff)) * Math.Sqrt(precision.Determinant()) / Math.Pow(2 * Math.PI, what.Count * 0.5); sum += mixture.Weights[i] * prob; } sum /= mixture.WeightSum(); return(MathHelper.LogInf(sum)); }