2

我试图找到一些点与原点的马氏距离。MATLAB 命令是 mahal(Y,X)

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

4

1 回答 1

3

我认为你对正在做什么有点困惑mahal()。首先,计算 Mahalanobis 距离需要一组点,从中计算协方差。

该函数的 Matlab 文档中,它清楚地表明正在计算的距离是:

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

其中mu是 的总体平均值,XSIGMA的总体协方差矩阵X。由于您的总体由一个点(原点)组成,它没有协方差,因此SIGMA矩阵不可逆,因此在距离中获得 NaN/Inf 值的错误。

如果您知道要用于马氏距离的协方差结构,那么您可以使用上面的公式自己计算它。假设您关心的协方差存储在一个矩阵S中。你想要距离原点的距离,所以你不需要从 中的值中减去任何东西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
于 2012-04-16T21:02:31.433 回答