快捷方式

torch.linalg.cond

torch.linalg.cond(A, p=None, *, out=None) Tensor

计算矩阵相对于矩阵范数的条件数。

K\mathbb{K}R\mathbb{R}C\mathbb{C},矩阵 AKn×nA \in \mathbb{K}^{n \times n} 的**条件数** κ\kappa 定义为

κ(A)=ApA1p\kappa(A) = \|A\|_p\|A^{-1}\|_p

A 的条件数衡量线性系统 AX = B 相对于矩阵范数的数值稳定性。

支持 float、double、cfloat 和 cdouble 数据类型输入。还支持矩阵批处理,如果 A 是一个矩阵批处理,则输出具有相同的批处理维度。

p 定义了计算的矩阵范数。支持以下范数

p

矩阵范数

None

2-范数(最大奇异值)

‘fro’

弗罗贝尼乌斯范数

‘nuc’

核范数

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

最大奇异值

-2

最小奇异值

其中 inf 指的是 float(‘inf’),NumPy 的 inf 对象,或任何等效的对象。

对于 p(‘fro’, ‘nuc’, inf, -inf, 1, -1) 中的一个,此函数使用 torch.linalg.norm()torch.linalg.inv()。因此,在这种情况下,矩阵(或批次中的每个矩阵)A 必须是方阵且可逆。

对于 p(2, -2) 中,此函数可以用奇异值 σ1σn\sigma_1 \geq \ldots \geq \sigma_n

κ2(A)=σ1σnκ2(A)=σnσ1\kappa_2(A) = \frac{\sigma_1}{\sigma_n}\qquad \kappa_{-2}(A) = \frac{\sigma_n}{\sigma_1}

在这些情况下,它是使用 torch.linalg.svdvals() 计算的。对于这些范数,矩阵(或批次中的每个矩阵)A 可以具有任何形状。

注意

当输入在 CUDA 设备上时,如果 p(‘fro’, ‘nuc’, inf, -inf, 1, -1) 中的一个,则此函数会将该设备与 CPU 同步。

另请参阅

torch.linalg.solve() 用于解决方阵线性系统的函数。

torch.linalg.lstsq() 用于解决一般矩阵线性系统的函数。

参数
  • A (张量) – 形状为 (*, m, n) 的张量,其中 *p(2, -2) 中时零个或多个批次维度,并且形状为 (*, n, n),其中每个矩阵对于 p(‘fro’, ‘nuc’, inf, -inf, 1, -1) 中时都是可逆的。

  • p (整数, inf, -inf, 'fro', 'nuc', 可选) – 计算中使用的矩阵范数类型(见上文)。默认值:None

关键字参数

out (张量, 可选) – 输出张量。如果为 None 则忽略。默认值:None

返回值

一个实值张量,即使 A 是复数。

引发

运行时错误 – 如果 p(‘fro’, ‘nuc’, inf, -inf, 1, -1) 中的一个,并且 A 矩阵或批次 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]])

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源