Mahalanobis Constructor (SingularValueDecomposition) |
Namespace: Accord.Math.Distances
// Let's say we would like to compute the Mahalanobis // distance between the two vectors x and y below: double[] x = { 2, 5, 1 }; double[] y = { 4, 2, 2 }; // Using the covariance double[,] covariance = { { 4, 3, 0 }, { 3, 5, 2 }, { 0, 2, 6 } }; // There are multiple ways to create a Mahalanobis // distance. The easiest method by far is by using: var mahalanobis = Mahalanobis.FromCovarianceMatrix(covariance); // Then, you can compute the distance using: double distance = mahalanobis.Distance(x, y); // However, if you need more control over how the covariance matrix // should be inverted, or if you have the precision matrix instead of // the covariance, you can use any of the alternative methods: var fromCholesky = new Mahalanobis(new CholeskyDecomposition(covariance)); var fromSVD = new Mahalanobis(new SingularValueDecomposition(covariance)); var fromPrecision1 = new Mahalanobis(covariance.Inverse()); var fromPrecision2 = Mahalanobis.FromPrecisionMatrix(covariance.Inverse()); // They all should produce equivalent results: double a = fromCholesky.Distance(x, y); double b = fromSVD.Distance(x, y); double c = fromPrecision1.Distance(x, y); double d = fromPrecision2.Distance(x, y);