torch.linalg.cond¶
- torch.linalg.cond(A, p=None, *, out=None) Tensor ¶
计算矩阵相对于矩阵范数的条件数。
令 为 或 ,矩阵 的条件数 定义为
条件数衡量了线性系统 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) 的范围内,该函数可以用 的奇异值来计算。在这些情况下,它使用
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]])