快捷键

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

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

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

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

p

矩阵范数

2-范数(最大的奇异值)

‘fro’

Frobenius 范数

‘nuc’

核范数

无穷

求 max(sum(abs(x), dim=1))

-无穷大

求 x 的绝对值之和的最小值(按维度 1)

1

求 x 的绝对值之和的最大值(按维度 0)

-1

求 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) 的范围内,该函数可以用 σ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() 用于解决方阵线性方程组的函数。

用于解决一般矩阵线性方程组的函数。

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

  • p(int,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 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

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

查看资源