2010-09-22 19 views
36

Al ejecutar mi código recibo estas advertencias, siempre en grupos de cuatro, esporádicamente. Intenté localizar la fuente colocando mensajes de depuración antes y después de ciertas declaraciones para señalar su origen.'valor no válido encontrado en la advertencia double_scalars', posiblemente numpy

Warning: invalid value encountered in double_scalars 
Warning: invalid value encountered in double_scalars 
Warning: invalid value encountered in double_scalars 
Warning: invalid value encountered in double_scalars 

¿Esto es una advertencia de Numpy, y qué es un doble escalar?

De Numpy utilizo

min(), argmin(), mean() and random.randn() 

También uso Matplotlib

+7

Un doble escalar es un valor de tipo 'double'. Se llama escalar para diferenciarlo en numpy de matrices dobles. –

+0

En mi caso, hay un "FloatingPointError: valor no válido encontrado en el poder" en >>> numpy.array ([- 4.00000000e-01]) ** 1.49011611939e-08 –

Respuesta

29

Parece un error de cálculo en coma flotante. Compruebe la función numpy.seterr para obtener más información sobre dónde sucede.

9

A veces, NaNs o valores nulos en los datos generarán este error con Numpy. Si está ingiriendo datos de, digamos, un archivo CSV o algo así, y luego operando sobre los datos usando matrices numpy, el problema podría haberse originado con la ingesta de datos. Podría intentar alimentar su código con un pequeño conjunto de datos con valores conocidos y ver si obtiene el mismo resultado.

+3

Algo similar me pasó a mí, en mi caso estaba llamando a la función media de numpy en una matriz vacía. – Alexander

+0

Otra cosa a tener en cuenta ... También lo entiendo cuando intento elevar un número negativo a una potencia fraccional: ValueError: el número negativo no puede elevarse a una potencia fraccional –

28

En mi caso, descubrí que era una división por cero.

+2

Mina también. Estaba tratando de comparar exactamente los mismos vectores y obtuve la división por cero – chimpsarehungry

+1

O tomando el promedio de una lista vacía. Oops. – Matt

+3

¿Una división por cero no generaría un 'ZeroDivisionError'? – jfn

3

La matriz de tamaño cero pasada a numpy.mean plantea esta advertencia (como se indica en varios comentarios).

Para algunos otros candidatos:

  • median también plantea esta advertencia en la matriz de tamaño cero. otros

candidatos no plantean esta advertencia:

  • min,argmin tanto elevar ValueError de matriz vacía
  • randn toma *arg; utilizando randn(*[]) devuelve un solo número aleatorio
  • std,var retorno nan en una matriz vacía
1

me encontré con problema similar - Valor no válido encontrado en ... Después de pasar mucho tiempo tratando de averiguar qué está causando esto error Creo que en mi caso fue debido a NaN en mi marco de datos. Echa un vistazo al trabajo con datos faltantes en pandas.

== Ninguno Ninguno verdadera

np.nan == np.nan Falso

Cuando NaN no es igual a NaN entonces las operaciones aritméticas como la división y multiplicación hace que se lance este error.

Un par de cosas que puede hacer para evitar este problema:

  1. Uso pd.set_option para establecer el número de decimales a considerar en su análisis de lo que un número infinitesmall no provoca problema similar - ('display. float_format ', lambda x:'% .3f '% x).

  2. Utilice df.round() para redondear los números, de modo que Panda suelta los dígitos restantes del análisis. Y lo más importante,

  3. Establezca NaN a cero df = df.fillna (0). Tenga cuidado si llenar NaN con cero no se aplica a sus conjuntos de datos porque esto tratará el registro como cero, por lo que N en el medio, estándar, etc. también cambia.

Cuestiones relacionadas