He aquí un ejemplo que emite la misma advertencia:
import numpy as np
np.seterr(all='warn')
A = np.array([10])
a=A[-1]
a**a
rendimientos
RuntimeWarning: overflow encountered in long_scalars
En el ejemplo anterior sucede porque a
es de tipo int32
y el valor máximo v Alue Storable en un int32
es 2 ** 31-1. Desde 10**10 > 2**32-1
, la exponenciación da como resultado un número que es más grande que el que se puede almacenar en un int32
.
Tenga en cuenta que no puede confiar en np.seterr(all='warn')
para detectar todos los errores de desbordamiento en numpy. Por ejemplo, en 32 bits NumPy
>>> np.multiply.reduce(np.arange(21)+1)
-1195114496
mientras que en 64 bits NumPy:
>>> np.multiply.reduce(np.arange(21)+1)
-4249290049419214848
ambos fallan sin ninguna advertencia, aunque también se debe a un error de desbordamiento. ¡La respuesta correcta es 21! es igual a
In [47]: import math
In [48]: math.factorial(21)
Out[50]: 51090942171709440000L
According to numpy developer, Robert Kern,
A diferencia de los errores de coma flotante verdaderos (donde el FPU de hardware establece un indicador cuando llega a registrarse una operación atómica que se desborda), tenemos que poner en práctica la detección de desbordamiento de entero Nosotros mismos. Lo hacemos en los escalares , pero no en las matrices porque sería demasiado lento implementar para cada operación atómica en las matrices.
Así que la carga está en que elija dtypes
apropiado para que no se desborde la operación.
¿Podría mostrar una [ejemplo de corta, completa] (http://sscce.org/) que demuestra este problema ? –
Incluyó la etiqueta numpy. Nada en sus preguntas sugiere numpy. No ha incluido el código que nos permite reproducir el error. Por favor, hazlo. –
posible duplicado de http://stackoverflow.com/questions/3767409/python-warning-possibly-numpy – rocksportrocker