[SciPy-user] Calculating a lot of (squared) Mahalanobis distances
Thu Nov 6 21:36:58 CST 2008
I'm trying to calculate a lot of Mahalanobis distances (in essence,
applying a positive definite quadratic x.T * A * x to a lot of vectors
x) and trying to think of the fastest way to do it with numpy.
If I've got a single vector x and a 2D array sigmainv, then I've got
something like this.
import numpy as np
xmmu = x - mu
dist = np.dot(xmmu, np.dot(sigmainv, xmmu))
However if I've got a DxN 2d array of N different vectors for which I
want this quantity, it seems I can either use a loop or do something
xmmu = x - mu[:,np.newaxis]
dist = np.diag(xmmu, np.dot(sigmainv, xmmu)))
It seems like a lot of wasted computation to throw out the off-
diagonals. One thought I've had would be to diagonalize sigmainv and
then do something tricky with scalar products and broadcasting the
diagonal, but I am not sure whether that would save me much.
Does anyone have any other tricks up their sleeve?
More information about the SciPy-user