Je travaille sur une implémentation de la séquence de Fibonacci dans Numpy en utilisant le Q-Matrix method. Les résultats sont bons jusqu'à n = 47. À ce stade, la fonction matrix_power
renvoie incorrect results. Toute explication sur la raison pour laquelle cela se produit?La fonction matrix_power de Numpy donne de mauvais résultats pour les grands exposants
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
Etes-vous sûr? Je reçois '2971215073'. S'il s'agit d'un problème de plate-forme, essayez de convertir la matrice en un autre type, comme 'numpy.linalg.matrix_power (qmatrix, n) .astype (numpy.uint64) .flatten(). Tolist() [0]' – alexpeits
Merci, en effet Cela semble être un problème de plateforme. Pour 'n = 47', la conversion en' numpy.uint32' corrige le résultat, mais il se trompe à nouveau pour les plus grandes valeurs. Je n'ai pas eu à faire de casting avant, quelle est la meilleure approche pour que ça marche? –
Vous pouvez lire sur [this] (https://docs.scipy.org/doc/numpy/user/basics.types.html). Fondamentalement, un petit entier, disons 4 bits, ne peut pas contenir une très grande valeur, et il fait des choses bizarres quand vous demandez de l'afficher, donc vous lancez le tableau afin de surpasser ce problème. D'après ce que je vois, 'uint64' est le plus grand que vous puissiez obtenir, mais je ne suis pas un expert. – alexpeits