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?
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
.
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()
).