J'ai vécu un RuntimeWarning
RuntimeWarning: invalid value encountered in less_equal
Généré par cette ligne de code:
center_dists[j] <= center_dists[i]
center_dists[j]
et center_dists[i]
sont tous deux des tableaux numpy
Quelle pourrait être la cause de cet avertissement?
Cela se produit probablement à cause d'un np.nan
quelque part dans les entrées impliquées. Un exemple est présenté ci-dessous -
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)
Pour toutes les comparaisons impliquant np.nan
, le résultat serait False
. Confirmons-le pour une comparaison broadcasted
. Voici un échantillon -
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)
Veuillez noter la troisième colonne de la sortie correspondant à la comparaison impliquant le troisième élément np.nan
dans B
et qui donne toutes les valeurs False
.
Pour faire suite à la réponse de Divakar et à son commentaire sur la suppression de la variable RuntimeWarning
, une méthode plus sûre consiste à les supprimer uniquement localement à l'aide de with np.errstate()
( docs ): il est généralement bon d'être alerté lors d'une comparaison avec np.nan
return False
, et ignorez l’avertissement uniquement lorsque c’est vraiment ce que vous souhaitez. Voici l'exemple de l'OP:
with np.errstate(invalid='ignore'):
center_dists[j] <= center_dists[i]
En quittant le bloc with
, le traitement des erreurs est réinitialisé.
Au lieu de invalid value encountered
, on peut également ignorer toutes les erreurs en passant all='ignore'
. Il est intéressant de noter que ceci est manquant dans la kwargs
dans les documents pour np.errstate()
, mais pas dans ceux pour np.seterr()
. (Cela ressemble à un petit bogue dans la documentation np.errstate()
.)