Sto lavorando a un'implementazione della sequenza di Fibonacci in Numpy usando il Metodo Q-Matrix. I risultati vanno bene fino a n = 47. A questo punto, il matrix_power
la funzione sta tornando risultati errati. Qualche spiegazione sul perché questo sta accadendo?
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
risposte:
4 per risposta № 1Se hai intenzione di giocare con ilNumeri di Fibonacci, è probabilmente giustificato sacrificare un po 'di velocità e usare gli interi arbitrari di Python. Puoi farlo impostando il dtype della matrice su object
.
Inoltre non hai davvero bisogno di usare il np.matrix
oggetto, è quasi sempre meglio attenersi a normali matrici. Ed è possibile estrarre l'elemento pertinente senza convertire la matrice in un elenco:
def fibonacci(n):
qmatrix = numpy.array([[1, 1], [1, 0]], dtype=object)
return numpy.linalg.matrix_power(qmatrix, n)[0, 1]