torch.linalg.cond
- torch.linalg.cond(A, p=None, *, out=None) → Tensor
-
计算矩阵相对于矩阵范数的条件数。
设 为实数集 或复数集 ,矩阵 的条件数定义为:
矩阵
A
的条件数衡量了线性系统 AX = B 在矩阵范数下的数值稳定性。支持浮点型、双精度型、复数浮点型和复数双精度型的数据类型作为输入。还支持矩阵的批量处理,如果
A
是一组矩阵,那么输出将具有相同的批处理维度。p
定义了要计算的矩阵范数。支持的范数包括:p
矩阵范数
无
2-范数(即最大奇异值)
“fro”
Frobenius 范数
“nuc”
核范数
inf 由于这里的修改目标是为了使句子更自然、更符合中文习惯,但给定的内容仅为一个标签“inf”,在不改变其意义和结构的前提下,保持原样最为合适。因此直接返回原文: infmax(sum(abs(x), dim=1))
-∞
min(sum(abs(x), dim=1))
1
max(sum(abs(x), dim=0))
-1
min(sum(abs(x), dim=0)) (表示先对x取绝对值,然后沿维度0求和,最后取最小值)
2
最大的奇异值
-2
最小奇异值
其中inf指的是float('inf')、NumPy的inf对象,或者任何等效的对象。
当
p
为(‘fro’, ‘nuc’, inf, -inf, 1, -1)中的一个值时,此函数使用torch.linalg.norm()
和torch.linalg.inv()
。因此,在这种情况下,矩阵(或批次中的每个矩阵)A
必须是方阵且可逆。当
p
为 (2, -2) 时,此函数可以基于奇异值 来计算在这种情况下,它是通过
torch.linalg.svdvals()
函数计算的。对于这些范数,矩阵(或批次中的每个矩阵)A
可以是任何形状。注意
当输入位于CUDA设备上时,如果
p
是(‘fro’, ‘nuc’, inf, -inf, 1, -1)之一,此函数会将该设备与CPU同步。- 参数
- 关键字参数
-
out (Tensor, optional) – 输出张量。默认为None,若未指定则忽略。
- 返回值
-
这是一个实值张量,即便在
A
为复数的情况下也成立。 - 异常
-
RuntimeError – 如果
p
是 (‘fro’, ‘nuc’, inf, -inf, 1, -1) 中的一个,并且A
矩阵或批次中的任何矩阵不是方阵或不可逆。
示例:
>>> 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]])