Ich wollte NumPy
in einer Fibonacci Frage wegen seiner Effizienz in der Matrix-Multiplikation verwenden. Sie wissen, dass es eine Methode zum Finden von Fibonacci-Zahlen mit der Matrix [[1, 1], [1, 0]]
gibt.Numpy Matrix Exponentiation ergibt negativen Wert
Ich schrieb einige sehr einfachen Code aber nach n
zunimmt, wird die Matrix negative Zahlen zu geben beginnen.
import numpy
def fib(n):
return (numpy.matrix("1 1; 1 0")**n).item(1)
print fib(90)
# Gives -1581614984
Was könnte der Grund dafür sein?
Hinweis:linalg.matrix_power
gibt auch negative Werte.
Hinweis2: Ich habe versucht Zahlen von 0 bis 100. Es beginnt nach 47 geben negative Werte. Ist es ein großes ganzzahliges Problem, weil NumPy in C codiert ist? Wenn ja, wie könnte ich das lösen?
Edit: Verwendung von regulären Python list
Matrix mit linalg.matrix_power
gab auch negative Ergebnisse. Auch lassen Sie mich hinzufügen, dass nicht alle Ergebnisse nach 47 negativ sind, geschieht es zufällig.
Edit2: Ich versuchte mit der Methode @ AlbertoGarcia-Raboso vorgeschlagen. Es löste das Problem mit der negativen Zahl, jedoch traten weitere Probleme auf. Es gibt die Antwort als -5.168070885485832e+19
wo ich -51680708854858323072L
brauche. Also habe ich versucht mit int()
, es konvertiert es in L
, aber jetzt scheint es die Antwort ist falsch wegen eines Verlustes an Genauigkeit.
Ihr Code ergibt '2880067194370816120' für mich (numpy1.10.4). Welche numpige Version hast du? – mgilson
Versuchen Sie, Punkte nach Ihren '1's und' 0's einzufügen, um eine Matrix von Floats zu erstellen: 'numpy.matrix (" 1. 1; 1. 0. ")'. –
@mgilson Ich habe 'numpy .__ version__' verwendet, was' 1.11.1' – Rockybilly