问题描述
我使用斐波那契矩阵的概念编写了一个获取斐波那契数列的代码,灵感来自这篇 Instagram 帖子
def f(n):
import numpy as np
m=np.array([[1,1],[1,0]],dtype=np.int64)
m1=m
for i in range(0,n):
m1=np.matmul(m1,m)
return m1[0,1]
但是在 n=93 之后,它开始给出负数。如果我使用 np.int32 作为 dtype,那么在 n=47 之后,它开始给出否定和错误的结果。 我正在使用 python 3.9,我希望我的结果是整数(不是浮点数)怎么做才能得到 n=1000 或更大的正确结果?
解决方法
Numpy ctypes 是本地实现的,因此 long 数据类型在达到 64 位时将开始溢出。但是,您可以使用 dtype=object
来使用 python 的任意大整数,但这可能会变得很慢。