2013-07-29 3 views
7

python-numpyが行列が特異であるかどうかを判断するのに役立つかどうかはわかりません。私は行列式に基づいて決定しようとしていますが、numpyは1.e-10付近でいくつかの値を生成しています。python-numpyで行列が特異であるかどうかを判断する方法は?

+0

はい、それは同じ質問をしましたが、私は:-)ここからよりエレガントな答えを得たが –

答えて

11

np.linalg.matrix_rankをデフォルトの許容差で使用してください。特異値ゼロを検討するための適切なカットオフであるかについて、その関数のドキュメンテーション文字列にいくつかの議論があります:

>>> 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 
関連する問題