torch.linalg.cond#
- torch.linalg.cond(A, p=None, *, out=None) Tensor#
Computes the condition number of a matrix with respect to a matrix norm.
Letting be or , the condition number of a matrix is defined as
The condition number of
Ameasures the numerical stability of the linear system AX = B with respect to a matrix norm.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.pdefines the matrix norm that is computed. The following norms are supported:pmatrix norm
None
2-norm (largest singular value)
‘fro’
Frobenius norm
‘nuc’
nuclear norm
inf
max(sum(abs(x), dim=1))
-inf
min(sum(abs(x), dim=1))
1
max(sum(abs(x), dim=0))
-1
min(sum(abs(x), dim=0))
2
largest singular value
-2
smallest singular value
where inf refers to float(‘inf’), NumPy’s inf object, or any equivalent object.
For
pis one of (‘fro’, ‘nuc’, inf, -inf, 1, -1), this function usestorch.linalg.norm()andtorch.linalg.inv(). As such, in this case, the matrix (or every matrix in the batch)Ahas to be square and invertible.For
pin (2, -2), this function can be computed in terms of the singular valuesIn these cases, it is computed using
torch.linalg.svdvals(). For these norms, the matrix (or every matrix in the batch)Amay have any shape.Note
When inputs are on a CUDA device, this function synchronizes that device with the CPU if
pis one of (‘fro’, ‘nuc’, inf, -inf, 1, -1).See also
torch.linalg.solve()for a function that solves linear systems of square matrices.torch.linalg.lstsq()for a function that solves linear systems of general matrices.- Parameters
A (Tensor) – tensor of shape (*, m, n) where * is zero or more batch dimensions for
pin (2, -2), and of shape (*, n, n) where every matrix is invertible forpin (‘fro’, ‘nuc’, inf, -inf, 1, -1).p (int, inf, -inf, 'fro', 'nuc', optional) – the type of the matrix norm to use in the computations (see above). Default: None
- Keyword Arguments
out (Tensor, optional) – output tensor. Ignored if None. Default: None.
- Returns
A real-valued tensor, even when
Ais complex.- Raises
RuntimeError – if
pis one of (‘fro’, ‘nuc’, inf, -inf, 1, -1) and theAmatrix or any matrix in the batchAis not square or invertible.
Examples:
>>> A = torch.randn(3, 4, 4, dtype=torch.complex64) >>> torch.linalg.cond(A) >>> A = torch.tensor([[1., 0, -1], [0, 1, 0], [1, 0, 1]]) >>> torch.linalg.cond(A) tensor([1.4142]) >>> torch.linalg.cond(A, 'fro') tensor(3.1623) >>> torch.linalg.cond(A, 'nuc') tensor(9.2426) >>> torch.linalg.cond(A, float('inf')) tensor(2.) >>> torch.linalg.cond(A, float('-inf')) tensor(1.) >>> torch.linalg.cond(A, 1) tensor(2.) >>> torch.linalg.cond(A, -1) tensor(1.) >>> torch.linalg.cond(A, 2) tensor([1.4142]) >>> torch.linalg.cond(A, -2) tensor([0.7071]) >>> A = torch.randn(2, 3, 3) >>> torch.linalg.cond(A) tensor([[9.5917], [3.2538]]) >>> A = torch.randn(2, 3, 3, dtype=torch.complex64) >>> torch.linalg.cond(A) tensor([[4.6245], [4.5671]])