我試圖找到從該origin.The MATLAB命令的一些點的馬氏距離泰姬陵是(Y,X)馬氏距離
但是,如果我用這個,我得到NaN的作爲矩陣X = 0作爲距離需要從原點找到。可以請某人幫助我這個。應該怎麼做
我試圖找到從該origin.The MATLAB命令的一些點的馬氏距離泰姬陵是(Y,X)馬氏距離
但是,如果我用這個,我得到NaN的作爲矩陣X = 0作爲距離需要從原點找到。可以請某人幫助我這個。應該怎麼做
我認爲你對mahal()
正在做什麼感到困惑。首先,馬哈拉諾比斯距離的計算需要一組點,從中計算協方差。
在Matlab docs for this function它清楚地表明,被計算的距離是:
d(I) = (Y(I,:)-mu)*inv(SIGMA)*(Y(I,:)-mu)'
其中mu
是人口平均的X
和SIGMA
的是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
是的,這是問題所在。它在文檔中說Y是你想要計算距離的點集,mu和sigma是樣本均值和協方差。由於我在做PCA,因爲我工作時的平均值爲零在PCA空間中。我希望每個點與新原點的距離。那麼我應該怎麼做 – SB26 2012-04-16 21:06:32
您需要計算PCA空間中新點的協方差。馬哈拉諾比斯距離首先需要一個協方差。必須有一組點,然後通過用PCA進行投影來對它們進行變換,現在這些投影點具有新的均值和協方差。如果將所有這些點放入'X'矩陣,那麼您的原始代碼將用於計算距新平均值的距離。否則,如果新的均值在理論上應該爲零,則只需計算投影點的協方差並使用公式計算距離。 – ely 2012-04-16 21:09:16
嗯,我試過使用上面的公式.my Y是一個40700 * 3的矩陣,其中每行有3列,因爲它是一個RGB圖像,每一行對應一個像素。協方差矩陣是一個3 * 3矩陣。因此,上述公式給我一個3 * 3的矩陣。但是如果我想要找到距離每個點的距離,我是不是應該得到一個40700 * 1的矩陣。這就是爲什麼我覺得我錯了某處 – SB26 2012-04-16 21:13:01
請出示投入到'mahal'命令。 – PearsonArtPhoto 2012-04-16 20:56:14
對mahal命令的輸入是一個407000 * 3的Y矩陣,X矩陣應該是原點,並且由於MATLAB需要X具有比列更多的行,所以它的4 * 3矩陣爲零。 – SB26 2012-04-16 21:08:09