Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to decide a whether a matrix is singular in python-numpy? [duplicate]

Tags:

python

numpy

I am not sure whether python-numpy can help us decide whether a matrix is singular or not. I am trying to decide based on the determinant, but numpy is producing some values around 1.e-10 and not sure what should we choose for a critical value.

like image 273
Hailiang Zhang Avatar asked Jul 29 '13 18:07

Hailiang Zhang


People also ask

Is matrix singular NumPy?

By definition, a matrix is singular and cannot be inverted if it has a determinant of zero. You can use the det() function from NumPy to calculate the determinant of a given matrix before you attempt to invert it: What is this? The determinant of our matrix is zero, which explains why we run into an error.

How do you know if a matrix is invertible with NumPy?

We use numpy. linalg. inv() function to calculate the inverse of a matrix. The inverse of a matrix is such that if it is multiplied by the original matrix, it results in identity matrix.


1 Answers

Use np.linalg.matrix_rank with the default tolerance. There's some discussion on the docstring of that function on what is an appropriate cutoff to consider a singular value zero:

>>> a = np.random.rand(10, 10)
>>> b = np.random.rand(10, 10)
>>> b[-1] = b[0] + b[1] # one row is a linear combination of two others
>>> np.linalg.matrix_rank(a)
10
>>> np.linalg.matrix_rank(b)
9
>>> def is_invertible(a):
...     return a.shape[0] == a.shape[1] and np.linalg.matrix_rank(a) == a.shape[0]
... 
>>> is_invertible(a)
True
>>> is_invertible(b)
False
like image 150
Jaime Avatar answered Sep 19 '22 14:09

Jaime