torch.linalg.matrix_rank¶
-
torch.linalg.matrix_rank(A, tol=None, hermitian=False, *, out=None) → Tensor¶ Computes the numerical rank of a matrix.
The matrix rank is computed as the number of singular values (or eigenvalues in absolute value when
hermitian= True) that are greater than the specifiedtolthreshold.Supports input of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if
Ais a batch of matrices then the output has the same batch dimensions.If
hermitian= True,Ais assumed to be Hermitian if complex or symmetric if real, but this is not checked internally. Instead, just the lower triangular part of the matrix is used in the computations.If
tolis not specified andAis a matrix of dimensions (m, n), the tolerance is set to bewhere is the largest singular value (or eigenvalue in absolute value when
hermitian= True), and is the epsilon value for the dtype ofA(seetorch.finfo). IfAis a batch of matrices,tolis computed this way for every element of the batch.Note
The matrix rank is computed using singular value decomposition
torch.linalg.svd()ifhermitian= False (default) and the eigenvalue decompositiontorch.linalg.eigvalsh()whenhermitian= True. When inputs are on a CUDA device, this function synchronizes that device with the CPU.- Parameters
A (Tensor) – tensor of shape (*, m, n) where * is zero or more batch dimensions.
tol (float, Tensor, optional) – the tolerance value. See above for the value it takes when None. Default: None.
hermitian (bool, optional) – indicates whether
Ais Hermitian if complex or symmetric if real. Default: False.
- Keyword Arguments
out (Tensor, optional) – output tensor. Ignored if None. Default: None.
Examples:
>>> A = torch.eye(10) >>> torch.linalg.matrix_rank(A) tensor(10) >>> B = torch.eye(10) >>> B[0, 0] = 0 >>> torch.linalg.matrix_rank(B) tensor(9) >>> A = torch.randn(4, 3, 2) >>> torch.linalg.matrix_rank(A) tensor([2, 2, 2, 2]) >>> A = torch.randn(2, 4, 2, 3) >>> torch.linalg.matrix_rank(A) tensor([[2, 2, 2, 2], [2, 2, 2, 2]]) >>> A = torch.randn(2, 4, 3, 3, dtype=torch.complex64) >>> torch.linalg.matrix_rank(A) tensor([[3, 3, 3, 3], [3, 3, 3, 3]]) >>> torch.linalg.matrix_rank(A, hermitian=True) tensor([[3, 3, 3, 3], [3, 3, 3, 3]]) >>> torch.linalg.matrix_rank(A, tol=1.0) tensor([[3, 2, 2, 2], [1, 2, 1, 2]]) >>> torch.linalg.matrix_rank(A, tol=1.0, hermitian=True) tensor([[2, 2, 2, 1], [1, 2, 2, 2]])