14

python-numpy が行列が特異かどうかを判断するのに役立つかどうかはわかりません。行列式に基づいて決定しようとしていますが、numpy は 1.e-10 付近の値を生成しており、重要な値として何を選択すればよいかわかりません。

4

1 に答える 1

23

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
于 2013-07-29T18:55:02.990 に答える