2012-04-16 111 views
2

我試圖找到從該origin.The MATLAB命令的一些點的馬氏距離泰姬陵是(Y,X)馬氏距離

但是,如果我用這個,我得到NaN的作爲矩陣X = 0作爲距離需要從原點找到。可以請某人幫助我這個。應該怎麼做

+0

請出示投入到'mahal'命令。 – PearsonArtPhoto 2012-04-16 20:56:14

+0

對mahal命令的輸入是一個407000 * 3的Y矩陣,X矩陣應該是原點,並且由於MATLAB需要X具有比列更多的行,所以它的4 * 3矩陣爲零。 – SB26 2012-04-16 21:08:09

回答

3

我認爲你對mahal()正在做什麼感到困惑。首先,馬哈拉諾比斯距離的計算需要一組點,從中計算協方差。

Matlab docs for this function它清楚地表明,被計算的距離是:

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

其中mu是人口平均的XSIGMA的是X人口協方差矩陣。由於您的人口由單一點(原點)組成,因此它沒有協方差,因此矩陣不可逆,因此在距離中獲得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 
+0

是的,這是問題所在。它在文檔中說Y是你想要計算距離的點集,mu和sigma是樣本均值和協方差。由於我在做PCA,因爲我工作時的平均值爲零在PCA空間中。我希望每個點與新原點的距離。那麼我應該怎麼做 – SB26 2012-04-16 21:06:32

+0

您需要計算PCA空間中新點的協方差。馬哈拉諾比斯距離首先需要一個協方差。必須有一組點,然後通過用PCA進行投影來對它們進行變換,現在這些投影點具有新的均值和協方差。如果將所有這些點放入'X'矩陣,那麼您的原始代碼將用於計算距新平均值的距離。否則,如果新的均值在理論上應該爲零,則只需計算投影點的協方差並使用公式計算距離。 – ely 2012-04-16 21:09:16

+0

嗯,我試過使用上面的公式.my Y是一個40700 * 3的矩陣,其中每行有3列,因爲它是一個RGB圖像,每一行對應一個像素。協方差矩陣是一個3 * 3矩陣。因此,上述公式給我一個3 * 3的矩陣。但是如果我想要找到距離每個點的距離,我是不是應該得到一個40700 * 1的矩陣。這就是爲什麼我覺得我錯了某處 – SB26 2012-04-16 21:13:01