2013-07-29 11 views
7

Nie jestem pewien, czy python-numpy może pomóc nam zdecydować, czy macierz jest pojedyncza czy nie. Próbuję decydować na podstawie wyznacznika, ale numpy produkuje wartości około 1.e-10 i nie jest pewien, co wybrać dla wartości krytycznej.Jak zdecydować, czy macierz jest pojedyncza w python-numpy?

+0

Tak, to było to samo pytanie, ale dostałem bardziej elegancką odpowiedź stąd :-) –

Odpowiedz

11

Użyj np.linalg.matrix_rank z domyślną tolerancją. Dyskusja nad doctringiem tej funkcji jest na odpowiednim poziomie odcięcia, aby wziąć pod uwagę pojedynczą wartość 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 
Powiązane problemy