Dr. Drew - 1 year ago 103

Python Question

Working on some matrix algebra here. Sometimes I need to invert a matrix that may be singular or ill-conditioned. I understand it is pythonic to simply do this:

`try:`

i = linalg.inv(x)

except LinAlgErr as err:

#handle it

but am not sure how efficient that is. Wouldn't this be better?

`if linalg.cond(x) < 1/sys.float_info.epsilon:`

i = linalg.inv(x)

else:

#handle it

Does numpy.linalg simply perform up front the test I proscribed?

Answer Source

So based on the inputs here, I'm marking my original code block with the explicit test as the solution:

```
if linalg.cond(x) < 1/sys.float_info.epsilon:
i = linalg.inv(x)
else:
#handle it
```

Surprisingly, the numpy.linalg.inv function doesn't perform this test. I checked the code and found it goes through all it's machinations, then just calls the lapack routine - seems quite inefficient. Also, I would 2nd a point made by DaveP: that the inverse of a matrix should not be computed unless it's explicitly needed.