我不确定python-numpy是否可以帮助我们判断矩阵是否是单数。我试图根据行列式确定,但是numpy在1.e-10附近产生了一些值,并且不确定我们应该为临界值选择什么。
答案 0 :(得分:15)
使用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