2016-04-22 33 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

零行列式意味着您的矩阵具有线性相关的行(或列)。换句话说,模型中的某些信息是多余的(它包含过多或重复的信息)。重新开发您的模型以排除冗余。