原文:https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.matrix_rank.html
校对:(虚位以待)
numpy.linalg.
matrix_rank
(M, tol=None)[source]使用SVD方法返回数组的矩阵秩
数组的等级是数组的SVD奇异值的数目大于tol。
参数: | M:{(M,),(M,N)} array_like
tol:{None,float},可选
|
---|
笔记
The default threshold to detect rank deficiency is a test on the magnitude of the singular values of M. By default, we identify singular values less than S.max() * max(M.shape) * eps
as indicating rank deficiency (with the symbols defined above). 这是MATLAB使用的算法[1]。它也出现在数值配方中讨论的SVD解的线性最小二乘法[2]。
该默认阈值被设计为检测SVD计算的数值误差的秩错误。假设在M中有一列,它是M中其他列的精确(在浮点中)线性组合。在M上计算SVD通常不会产生精确等于0的奇异值:最小SVD值与0的任何差异将由SVD的计算中的数值不精确引起。我们对小SVD值的阈值考虑了这种数值不精确性,并且默认阈值将检测这种数值秩缺陷。即使M的一些列的线性组合不完全等于M的另一列,但是阈值可以声明矩阵M只在数字上非常接近M的另一列。
我们选择了默认阈值,因为它被广泛使用。其他阈值是可能的。例如,在数字配方的2007版本的其他地方,存在S.max() * np.finfo(M.dtype).eps / 2. * np.sqrt(m t8 > + n + 1. )
。作者将此阈值描述为基于“预期四舍五入误差”(p 71)。
上述阈值在SVD的计算中处理浮点舍入误差。但是,您可能有更多关于M中的错误来源的信息,这将使您考虑其他容差值来检测有效排名缺陷。对公差的最有用的度量取决于你打算在矩阵上使用的操作。例如,如果您的数据来自不确定度大于浮点ε的不确定度,则选择接近该不确定度的容差可能更可取。如果不确定性是绝对的而不是相对的,容差可以是绝对的。
参考文献
[R39] | MATLAB参考文档“Rank”http://www.mathworks.com/help/techdoc/ref/rank.html |
[R40] | W.K.Veterling和B.P.Flannery,“Numerical Recipes(3rd edition)”,Cambridge University Press,2007,第795页。 |
例子
>>> from numpy.linalg import matrix_rank
>>> matrix_rank(np.eye(4)) # Full rank matrix
4
>>> I=np.eye(4); I[-1,-1] = 0. # rank deficient matrix
>>> matrix_rank(I)
3
>>> matrix_rank(np.ones((4,))) # 1 dimension - rank 1 unless all 0
1
>>> matrix_rank(np.zeros((4,)))
0