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
。- 参数
- 关键字参数
-
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]]])