python – Numpy的matrix_power函数为大型指数提供错误的结果

参见英文答案 > Numpy matrix exponentiation gives negative value                                    1个
我正在使用Q-Matrix method在Numpy中实现Fibonacci序列.结果很好,直到n = 47.此时,matrix_power函数返回incorrect results.有关为什么会发生这种情况的任何解释?

import numpy
def fibonacci(n):
    qmatrix = numpy.matrix([[1, 1], [1, 0]])
    (a,b,c,d) = numpy.linalg.matrix_power(qmatrix,n).flatten().tolist()[0]
    return b
print fibonacci(47) # Outputs -1323752223

解决方法:

如果你打算使用Fibonacci数字,可能需要牺牲一些速度并使用Python的任意大整数.您可以通过将矩阵的dtype设置为object来实现.

你也不需要使用np.matrix对象,坚持使用普通数组几乎总是更好.并且您可以在不将数组转换为列表的情况下提取相关项:

def fibonacci(n):
    qmatrix = numpy.array([[1, 1], [1, 0]], dtype=object)
    return numpy.linalg.matrix_power(qmatrix, n)[0, 1]
上一篇:java – Fibonacci序列算法


下一篇:java – NumberFormatException:无限或NaN