with warning quitar off mostrar eliminar catch_warnings python numpy warnings matplotlib

python - warning - ''valor no válido encontrado en la advertencia de double_scalars'', posiblemente numpy



warning off python (5)

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.

Cuando ejecuto 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.

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 uso

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

También uso Matplotlib


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


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

Para algunos otros candidatos:

  • median también genera esta advertencia en una matriz de tamaño cero.

otros candidatos no plantean esta advertencia:

  • min,argmin elevan ValueError en una matriz vacía
  • randn toma *arg ; usar randn(*[]) devuelve un solo número aleatorio
  • std,var return nan en una matriz vacía

Me encontré con un problema similar - Se encontró un valor inválido en ... Después de pasar mucho tiempo tratando de descubrir qué está causando este 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 Verdadero

np.nan == np.nan False

Cuando NaN no es igual a NaN, las operaciones aritméticas como división y multiplicación hacen que arroje este error.

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

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

  2. Utilice df.round () para redondear los números de modo que Panda suelte los dígitos restantes del análisis. Y 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.


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