torch.linalg.inv

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

计算方阵的逆矩阵。如果矩阵不可逆,则抛出RuntimeError异常。

$\mathbb{K}$为实数集$\mathbb{R}$或复数集$\mathbb{C}$,对于一个矩阵$A \in \mathbb{K}^{n \times n}$,其逆矩阵$A^{-1} \in \mathbb{K}^{n \times n}$(如果存在)定义为:

$A^{-1}A = AA^{-1} = \mathrm{I}_n$

其中$\mathrm{I}_n$n维身份矩阵。

逆矩阵存在的充分必要条件是$A$可逆的。在这种情况下,逆矩阵是唯一的。

支持浮点型、双精度型、复数浮点型和复数双精度型的数据类型作为输入。还支持矩阵的批量处理,如果A是一组矩阵,那么输出将具有相同的批处理维度。

注意

当输入位于 CUDA 设备上时,此函数会将该设备与 CPU 同步。如果不进行同步的版本,请参见 torch.linalg.inv_ex()

注意

如果可能的话,考虑使用torch.linalg.solve()来计算矩阵与其逆矩阵的左乘运算,如下所示:

linalg.solve(A, B) == linalg.inv(A) @ B  # When B is a matrix

建议优先使用solve(),因为它的运行速度更快且数值稳定性更好。

参见

torch.linalg.pinv() 计算任意形状矩阵的伪逆(摩尔-_penrose 逆)。

torch.linalg.solve() 使用数值稳定算法计算 A.inv() @ B

参数

A (Tensor) – 形状为(*, n, n)的张量,其中*表示零个或多个批次维度,包含可逆矩阵。

关键字参数

out (Tensor, optional) – 输出张量。默认为None,若未指定则忽略。

异常

RuntimeError – 如果矩阵 A 或批次中的任何矩阵不可逆。

示例:

>>> A = torch.randn(4, 4)
>>> Ainv = torch.linalg.inv(A)
>>> torch.dist(A @ Ainv, torch.eye(4))
tensor(1.1921e-07)

>>> A = torch.randn(2, 3, 4, 4)  # Batch of matrices
>>> Ainv = torch.linalg.inv(A)
>>> torch.dist(A @ Ainv, torch.eye(4))
tensor(1.9073e-06)

>>> A = torch.randn(4, 4, dtype=torch.complex128)  # Complex matrix
>>> Ainv = torch.linalg.inv(A)
>>> torch.dist(A @ Ainv, torch.eye(4))
tensor(7.5107e-16, dtype=torch.float64)
本页目录