Matlab中的Mahalanobis距离

时间:2012-04-16 20:54:02

标签: matlab image-processing statistics pca

我试图从原点找到一些点的Mahalanobis距离.MATLAB命令是mahal(Y,X)

但是如果我使用这个,我得到NaN作为矩阵X = 0,因为需要从原点找到距离。有人可以帮我解决这个问题。怎么做呢

1 个答案:

答案 0 :(得分:3)

我认为你对mahal()正在做的事情感到有点困惑。首先,计算马哈拉诺比斯距离需要一组点,从中计算协方差。

Matlab docs for this function中,它清楚地表明计算的距离为:

d(I) = (Y(I,:)-mu)*inv(SIGMA)*(Y(I,:)-mu)'

其中muX的人口平均值,SIGMAX的人口协方差矩阵。由于您的总体由单个点(原点)组成,因此它没有协方差,因此SIGMA矩阵不可逆,因此在距离中获得NaN / Inf值的误差。

如果您知道要用于Mahalanobis距离的协方差结构,那么您可以使用上面的公式为自己计算它。让我们说你关心的协方差存储在矩阵S中。你想要距离w.r.t.原点,所以你不需要从Y中的值中减去任何东西,你需要计算的是:

for ii = 1:size(Y,1)
    d(ii) = Y(ii,:)*inv(S)*Y(ii,:)'; % Where Y(ii,:) is assumed to be a row vector.'
end