如何使用 python 中的 numpy.linalg.matrix_power 来提高矩阵的大幂?

How can I use numpy.linalg.matrix_power in python to raise a matrix to a large power?

我正试图在 python/numpy 中将矩阵提高到高次幂。似乎对于大指数,结果不正确(某种溢出?),高于 10000。这是 numpy.linalg.matrix_power 函数的已知行为还是我遗漏了什么? 这是我尝试使用其输出的代码:

import numpy as np
from numpy import linalg as LA
A = np.array([1L,1L,1L,0L]).reshape(2,2)
print 'A: %s'%A
print 'A^10: %s'%LA.matrix_power(A,10)
print 'A^1000: %s'%LA.matrix_power(A,1000)
print 'A^10000: %s'%LA.matrix_power(A,10000)

输出:

A: 
[[1 1]
 [1 0]]
A^10: 
[[89 55]
 [55 34]]
A^1000: 
[[9079565065540428013 817770325994397771]
 [817770325994397771 8261794739546030242]]
A^10000: 
[[-83367563645688771 -2872092127636481573]
 [-2872092127636481573 2788724563990792802]]

您已超出 64 位整数可表示的最大值。您可以试试这个:

A = np.array([1L,1L,1L,0L], dtype=float).reshape(2,2)

但请注意,当您将 A 提高到 10000 次方时,它会给您无穷大。至少比负数好。

如果您确实需要完成此数学运算,则可能必须改用多精度算术(请参阅下面 Jaime 的精彩评论)。