zeros index empty create array python arrays numpy runtime

python - index - numpy array zeros



¿Cuál podría ser la causa del ''valor no válido encontrado en less_equal'' en números? (2)

Experimenté un RuntimeWarning

RuntimeWarning: invalid value encountered in less_equal

Generado por esta línea de código mío:

center_dists[j] <= center_dists[i]

Tanto center_dists[j] como center_dists[i] son matrices numpy

¿Cuál podría ser la causa de esta advertencia?


Como seguimiento a la respuesta de Divakar y al comentario sobre cómo suprimir RuntimeWarning , una forma más segura es suprimirlos solo localmente with np.errstate() ( docs ): es bueno estar alerta en general cuando se comparan con np.nan False , e ignora la advertencia solo cuando esto es realmente lo que se pretende. Aquí para el ejemplo de OP:

with np.errstate(invalid=''ignore''): center_dists[j] <= center_dists[i]

Al salir del bloque with , el manejo de errores se restablece a lo que era antes.

En lugar de invalid value encountered un invalid value encountered , también se pueden ignorar todos los errores pasando all=''ignore'' . Curiosamente, esto falta en los kwargs en los documentos para np.errstate() , pero no en los de np.seterr() . (Parece un pequeño error en los documentos np.errstate() ).


Eso es más probable que ocurra debido a un np.nan en algún lugar de las entradas involucradas. Un ejemplo de ello se muestra a continuación:

In [1]: A = np.array([4, 2, 1]) In [2]: B = np.array([2, 2, np.nan]) In [3]: A<=B RuntimeWarning: invalid value encountered in less_equal Out[3]: array([False, True, False], dtype=bool)

Para todas aquellas comparaciones que involucran np.nan , daría como resultado False . Confirmémoslo para una comparación broadcasted . Aquí hay una muestra:

In [1]: A = np.array([4, 2, 1]) In [2]: B = np.array([2, 2, np.nan]) In [3]: A[:,None] <= B RuntimeWarning: invalid value encountered in less_equal Out[3]: array([[False, False, False], [ True, True, False], [ True, True, False]], dtype=bool)

Observe la tercera columna en la salida que corresponde a la comparación que involucra el tercer elemento np.nan en B y que da como resultado todos los valores False .