我有 X (nxd)、Y (mxd) 和正定 L (dxd)。我想计算 D,其中 D_ij 是 (X_i - Y_i) * L * (X_i - Y_i).T。n 和 m 在 250 左右;d 约为 10^4。
我可以使用scipy.spatial.distance.cdist
,但这很慢。
scipy.spatial.distance.cdist(X, Y, metric='mahalanobis', VI=L)
看着 Dougal 对这个问题的回答,我试过了
diff = X[np.newaxis, :, :] - Y[:, np.newaxis, :]
D = np.einsum('jik,kl,jil->ij', diff, L, diff)
这也很慢。
有没有更有效的方法来向量化这个计算?