2013-07-29 23 views
7

Non sono sicuro se python-numpy possa aiutarci a decidere se una matrice è singolare o meno. Sto cercando di decidere in base al determinante, ma numpy sta producendo alcuni valori intorno a 1.e-10 e non sono sicuro di cosa scegliere per un valore critico.Come decidere se una matrice è singolare in python-numpy?

+0

Sì, stava chiedendo la stessa domanda, ma ho avuto una risposta più elegante da qui :-) –

risposta

11

Utilizzare np.linalg.matrix_rank con la tolleranza predefinita. C'è qualche discussione sul docstring di quella funzione su quello che è un taglio opportuno prendere in considerazione un valore singolare a 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 
Problemi correlati