Python RuntimeWarning: desbordamiento encontrado en escalares largos
Soy nuevo en programación. En mi último proyecto de Python 2.7 encontré lo siguiente:
RuntimeWarning: desbordamiento encontrado en long_scalars
¿Podría alguien explicar lo que esto significa y lo que podría hacer para arreglarlo?
El código se ejecuta a través, pero no estoy seguro de si es una buena idea simplemente ignorar la advertencia.
Sucede durante un proceso de anexión como:
SomeList.append(VeryLongFormula)
2 answers
Aquí hay un ejemplo que emite la misma advertencia:
import numpy as np
np.seterr(all='warn')
A = np.array([10])
a=A[-1]
a**a
Rinde
RuntimeWarning: overflow encountered in long_scalars
En el ejemplo anterior sucede porque a
es de dtype int32
, y la máxima valor almacenables en un int32
es 2**31-1. Desde 10**10 > 2**32-1
, la exponenciación resulta en un número que es mayor que el que se puede almacenar en un int32
.
Tenga en cuenta que no puede confiar en np.seterr(all='warn')
para atrapar todo el desbordamiento
errores en numpy. Por ejemplo, en 32-bit 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 previo aviso, aunque también se debe a un error de desbordamiento. La respuesta correcta es que 21! es igual a
In [47]: import math
In [48]: math.factorial(21)
Out[50]: 51090942171709440000L
Según el desarrollador de numpy, Robert Kern ,
A diferencia de los verdaderos errores de coma flotante (donde la FPU de hardware bandera cada vez que hace una operación atómica que se desborda), necesitamos implementar la detección de desbordamiento de enteros nosotros mismos. Hacemos el escalares, pero no matrices porque lo haría ser demasiado lento para implementar para cada operación atómica en matrices.
Así que la carga está en usted para elegir apropiado dtypes
para que ninguna operación se desborda.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-14 14:39:33
Una manera fácil de superar este problema es usar tipo de 64 bits
list = numpy.array(list, dtype=numpy.float64)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-12 08:27:56