La exponenciación de la matriz de Numpy da un valor negativo
Yo queria usarNumPy
en una pregunta de Fibonacci debido a su eficiencia en la multiplicación de matrices. Sabes que hay un método para encontrar números de Fibonacci con la matriz[[1, 1], [1, 0]]
.
Escribí un código muy simple pero después de aumentarn
, la matriz está comenzando a dar números negativos.
import numpy
def fib(n):
return (numpy.matrix("1 1; 1 0")**n).item(1)
print fib(90)
# Gives -1581614984
¿Cuál podría ser la razón de ésto?
Nota: linalg.matrix_power
También da valores negativos.
Nota 2: Intenté números del 0 al 100. Comienza a dar valores negativos después de 47. ¿Es un problema entero grande porque NumPy está codificado en C? Si es así, ¿cómo podría resolver esto?
Editar: Usando Python regularlist
matriz conlinalg.matrix_power
También dio resultados negativos. También permítanme agregar que no todos los resultados son negativos después de 47, ocurre al azar.
Edit2: Intenté usar el método que sugirió AlbertoGarcia-Raboso. Se resolvió el problema del número negativo, sin embargo, se produjeron otros problemas. Da la respuesta como-5.168070885485832e+19
donde necesito-51680708854858323072L
. Entonces intenté usarint()
, lo convirtió aL
, pero ahora parece que la respuesta es incorrecta debido a una pérdida de precisión.