Raven - 2 years ago 151
Python Question

# Finding inverse of a matrix with high condition number

I am trying to find an inverse of this 9x9 covariance matrix so I can use it with mahalanobis distance. However, the result I'm getting from matrix inverse is a matrix full of

`1.02939420e+16`
. I have been trying to find why, considering Wolfram would give me the correct answer, and this seems to have something to do with condition number of matrix, which in this case is
`3.98290435292e+16`
.

Although I would like to understand the math behind this, what I really need at this moment is just a solution to this problem so I can continue with implementation. Is there a way how to find an inverse of such matrix? Or is it somehow possible to find inverse covariance matrix directly from data instead?

Edit: Matrix data (same as the pastebin link)

``````[[ 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]]
``````

The matrix `m` you provide has a determinant of `0` and is hence uninvertible from a numerical point of view (and this explain the great values you have which tends to bump to `Inf`):
``````In [218]: np.linalg.det(m)