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)
Author: nbro, 2011-09-26

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.

 40
Author: unutbu,
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)
 0
Author: Khaled,
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