2016-04-22 35 views
0

我想找到this 9x9 covariance matrix的反函數,所以我可以使用它與mahalanobis distance。但是,我從matrix inverse得到的結果是一個填滿1.02939420e+16的矩陣。我一直在試圖找出爲什麼,考慮到Wolfram會給我正確的答案,這似乎與矩陣的條件數有關,在這種情況下,它是3.98290435292e+16查找具有高條件編號的矩陣的逆

雖然我想了解背後的數學,但我現在真正需要的只是這個問題的解決方案,所以我可以繼續實施。有沒有辦法找到這種矩陣的逆矩陣?或者是否有可能直接從數據中找到逆協方差矩陣呢?

編輯:矩陣數據(相同引擎收錄鏈路)

[[ 0.46811097 0.15024959 0.01806486 -0.03029948 -0.12472314 -0.11952018 -0.14738093 -0.14655549 -0.06794621] 
[ 0.15024959 0.19338707 0.09046136 0.01293189 -0.05290348 -0.07200769 -0.09317139 -0.10125269 -0.12769464] 
[ 0.01806486 0.09046136 0.12575072 0.06507481 -0.00951239 -0.02944675 -0.05349869 -0.07496244 -0.13193147] 
[-0.03029948 0.01293189 0.06507481 0.12214787 0.04527352 -0.01478612 -0.02879678 -0.06006481 -0.1114809 ] 
[-0.12472314 -0.05290348 -0.00951239 0.04527352 0.164018 0.05474073 -0.01028871 -0.02695087 -0.03965366] 
[-0.11952018 -0.07200769 -0.02944675 -0.01478612 0.05474073 0.13397166 0.06839442 0.00403321 -0.02537928] 
[-0.14738093 -0.09317139 -0.05349869 -0.02879678 -0.01028871 0.06839442 0.14424203 0.0906558 0.02984426] 
[-0.14655549 -0.10125269 -0.07496244 -0.06006481 -0.02695087 0.00403321 0.0906558 0.17054466 0.14455264] 
[-0.06794621 -0.12769464 -0.13193147 -0.1114809 -0.03965366 -0.02537928 0.02984426 0.14455264 0.32968928]] 
+0

由於防火牆的原因,您提供的鏈接不需要全部工作。你可以在主題中發表你的矩陣嗎? –

+0

@ColonelBeauvel編輯了包含數據的問題。 – Raven

+0

因此,我在下面提供了我的答案,解釋了大值,但進一步看到你想通過嘗試顛倒一個不可逆矩陣來獲得什麼是有趣的... –

回答

2

您提供的矩陣m具有0行列式,因此是從數值上看uninvertible(這解釋了極大你有這往往磕碰到Inf值):

In [218]: np.linalg.det(m) 
Out[218]: 2.8479946613617788e-16 

如果你開始做線性代數運算/解決問題,我強烈建議到車ck一些基本概念,這將避免做數字錯誤/錯誤: https://en.wikipedia.org/wiki/Invertible_matrix

+0

我實際上意識到那些基礎知識,問題是我遵循主動形狀模型上的算法,該算法假定此矩陣將是不可逆的。所以,我沒有想到它不能達到這個基本條件。數據基本上是一個界標點周圍多個圖像的採樣梯度,我正在嘗試爲該點建立一個統計模型。然後使用模型 - 均值向量和協方差矩陣通過使用馬氏距離來找到與其他採樣向量的最佳匹配。然而,它找不到逆。 – Raven

+1

嗡嗡聲是的,它是使用模型失敗,因爲矩陣。在這種情況下,你應該採取另一種方法。但是,當必須反轉矩陣時,自動包含對具有閾值的行列式的檢查是很好的。所以,如果發生錯誤,您可以更輕鬆地進行調查! –

0

你面臨着一個非常重要的和基本的數學問題。如果你的方法給出了不可逆矩陣,那麼這個方法就有麻煩了。該方法試圖解決ill-posed problem。在十九世紀,可能所有合適的問題都已解決。解決病態問題的最常用方法是regularization。有時候Moore-Penrose pseudoinverse可能會很方便。 Scipy.linalg有僞逆。但僞逆並不是一條捷徑。使用僞逆函數,你用可解的問題B代替了不可解的問題A.有時問題B的解可以成功地工作,而不是解決問題A的不存在的問題,但這是數學研究的問題。

0

零行列式意味着您的矩陣具有線性相關的行(或列)。換句話說,模型中的某些信息是多餘的(它包含過多或重複的信息)。重新開發您的模型以排除冗餘。