如何使用 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 的精彩评论)。
我正试图在 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 的精彩评论)。