matrix_rank
- paddle.linalg. matrix_rank ( x, tol=None, hermitian=False, atol=None, rtol=None, name=None ) [源代码]
计算矩阵的秩。
备注
阈值参数支持单独使用
tol或联合使用atol与rtol。当单独使用
tol时:若 hermitian=False ,矩阵的秩是大于指定的tol阈值的奇异值的数量;若 hermitian=True ,矩阵的秩是大于指定tol阈值的特征值绝对值的数量。当联合使用
atol与rtol时,阈值的计算方式是max(atol, sigma_1 * rtol),其中sigma_1是奇异值中的最大值(或特征值绝对值的最大值)。当联合使用
atol与rtol时:若rtol未被声明,同时atol未被声明或取值为 0 ,rtol将被设为max(m,n) * eps,其中m,n分别是x矩阵的行数和列数,eps为x的类型的 epsilon 值;若rtol未被声明,同时atol取值大于 0 ,rtol将被设为 0 。
参数
x (Tensor) - 输入 tensor。它的形状应该是
[..., m, n],其中...是零或者更大的批次维度。如果x是一批矩阵,则输出具有相同的批次尺寸。x的数据类型应该为 float32,float64,complex64 或 complex128。tol (float|Tensor,可选) - 阈值。默认值:None。如果未指定
tol,sigma为所计算奇异值中的最大值(或特征值绝对值的最大值),eps为x的类型的 epsilon 值,使用公式tol=sigma * max(m,n) * eps来计算tol。请注意,如果x是一批矩阵,以这种方式为每批矩阵计算tol。hermitian (bool,可选) - 表示
x是否是 Hermitian 矩阵。默认值:False。当 hermitian=True 时,x被假定为 Hermitian 矩阵,这时函数内会使用更高效的算法来求解特征值,但在函数内部不会对x进行检查。我们仅仅使用矩阵的下三角来进行计算。atol (float|Tensor,可选) - 绝对阈值。未被声明时当作 0 。默认值:None。
rtol (float|Tensor,可选) - 相对阈值。未被声明时取值参照上述 Note(注解) 。默认值:None。
name (str,可选) - 具体用法请参见 api_guide_Name,一般无需设置,默认值为 None。
返回
Tensor, x 的秩,数据类型为 int64。
代码示例
>>> import paddle
>>> a = paddle.eye(10)
>>> b = paddle.linalg.matrix_rank(a)
>>> print(b)
Tensor(shape=[], dtype=int32, place=Place(cpu), stop_gradient=True,
10)
>>> c = paddle.ones(shape=[3, 4, 5, 5])
>>> d = paddle.linalg.matrix_rank(c, tol=0.01, hermitian=True)
>>> print(d)
Tensor(shape=[3, 4], dtype=int32, place=Place(cpu), stop_gradient=True,
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])