我想在斐波那契問題中使用NumPy
,因爲它在矩陣乘法中的效率很高。你知道有一種方法找到矩陣[[1, 1], [1, 0]]
的斐波納契數字。Numpy矩陣求冪給出負值
我寫了一些非常簡單的代碼,但增加n
後,矩陣開始給負數。
import numpy
def fib(n):
return (numpy.matrix("1 1; 1 0")**n).item(1)
print fib(90)
# Gives -1581614984
這可能是什麼原因?
注意:linalg.matrix_power
也給出了負值。
注2:我試着從0到100的數字。它開始給47後的負值。它是一個大整數的問題,因爲NumPy編碼在C?如果是這樣,我怎麼解決這個問題?
編輯:使用常規python list
矩陣與linalg.matrix_power
也給出了負面結果。另外讓我補充一點,在47之後並不是所有的結果都是負數,它是隨機發生的。
編輯2:我嘗試使用@ AlbertoGarcia-Raboso建議的方法。它解決了負數問題,但是另一個問題發生了。它給出了答案-5.168070885485832e+19
我需要-51680708854858323072L
。所以我嘗試使用int()
,它將它轉換爲L
,但現在看起來答案是錯誤的,因爲精度的損失。
您的代碼對我而言(numpy1.10.4)產生'2880067194370816120'。你有什麼numpy版本? – mgilson
嘗試在'1'和'0'之後添加點來創建浮點矩陣:'numpy.matrix(「1.1; 1.0。」)''。 –
@mgilson我用'numpy .__ version__'給了'1.11.1' – Rockybilly