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 .