torch.linalg.matrix_power

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

计算一个方阵的n次幂,其中n是整数。

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

如果 n 等于 0,它会返回与 A 形状相同的单位矩阵(或批次)。 如果 n 是负数,则返回每个可逆矩阵的 abs(n) 次幂的逆矩阵。

注意

如果可能的话,考虑使用torch.linalg.solve()来将矩阵乘以负幂(即从左侧乘以矩阵逆的幂),如果n > 0:

torch.linalg.solve(matrix_power(A, n), B) == matrix_power(A, -n)  @ B

尽可能使用solve()更为推荐,因为它的运行速度更快且数值稳定性更佳,优于显式计算$A^{-n}$

参见

torch.linalg.solve() 使用数值稳定的方法来计算 A.inverse() @ B

参数
  • A (Tensor) – 形状为(*, m, m)的张量,其中*表示零个或多个批次维度。

  • n (int) – 指数值。

关键字参数

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

异常

RuntimeError – 如果n< 0 并且矩阵 A 或者批次中的任何矩阵不可逆。

示例:

>>> A = torch.randn(3, 3)
>>> torch.linalg.matrix_power(A, 0)
tensor([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])
>>> torch.linalg.matrix_power(A, 3)
tensor([[ 1.0756,  0.4980,  0.0100],
        [-1.6617,  1.4994, -1.9980],
        [-0.4509,  0.2731,  0.8001]])
>>> torch.linalg.matrix_power(A.expand(2, -1, -1), -2)
tensor([[[ 0.2640,  0.4571, -0.5511],
        [-1.0163,  0.3491, -1.5292],
        [-0.4899,  0.0822,  0.2773]],
        [[ 0.2640,  0.4571, -0.5511],
        [-1.0163,  0.3491, -1.5292],
        [-0.4899,  0.0822,  0.2773]]])
本页目录