torch.linalg.matrix_rank#
- torch.linalg.matrix_rank(A, *, atol=None, rtol=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 threshold, where is the largest singular value (or eigenvalue).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
rtolis not specified andAis a matrix of dimensions (m, n), the relative tolerance is set to be and is the epsilon value for the dtype ofA(seefinfo). Ifrtolis not specified andatolis specified to be larger than zero thenrtolis set to zero.If
atolorrtolis atorch.Tensor, its shape must be broadcastable to that of the singular values ofAas returned bytorch.linalg.svdvals().Note
This function has NumPy compatible variant linalg.matrix_rank(A, tol, hermitian=False). However, use of the positional argument
tolis deprecated in favor ofatolandrtol.Note
The matrix rank is computed using a singular value decomposition
torch.linalg.svdvals()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
- Keyword Arguments
atol (float, Tensor, optional) – the absolute tolerance value. When None it’s considered to be zero. Default: None.
rtol (float, Tensor, optional) – the relative tolerance value. See above for the value it takes when None. Default: None.
hermitian (bool) – indicates whether
Ais Hermitian if complex or symmetric if real. Default: False.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, atol=1.0, rtol=0.0) tensor([[3, 2, 2, 2], [1, 2, 1, 2]]) >>> torch.linalg.matrix_rank(A, atol=1.0, rtol=0.0, hermitian=True) tensor([[2, 2, 2, 1], [1, 2, 2, 2]])