【发布时间】:2017-01-27 23:38:16
【问题描述】:
我正在使用Q-Matrix method 在 Numpy 中实现斐波那契数列。直到 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
【问题讨论】:
-
你确定吗?我得到
2971215073。如果是平台问题,请尝试将矩阵转换为另一种类型,例如numpy.linalg.matrix_power(qmatrix,n).astype(numpy.uint64).flatten().tolist()[0] -
谢谢,确实这似乎是一个平台问题。对于
n = 47,强制转换为numpy.uint32可以修复结果,但对于较大的值又会出错。我以前不需要做演员,让这个工作的最佳方法是什么? -
您可以阅读this。基本上是一个小整数,比如说 4 位,不能容纳一个很大的值,当你要求显示它时它会做一些奇怪的事情,所以你强制转换数组以解决这个问题。据我所知,
uint64是你能得到的最大的,但我不是专家。