numpy Where Fonction avec plusieurs conditions
Dans numpy, la fonction Where permet de filtrer un tableau en fonction d'une condition. Cependant, lorsque vous tentez d'appliquer plusieurs conditions à l'aide d'opérateurs logiques tels que & et |, des résultats inattendus peuvent se produire.
Considérez le code suivant :
import numpy as np dists = np.arange(0, 100, 0.5) r = 50 dr = 10 # Attempt to select distances within a range result = dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
Ce code tente de sélectionner les distances entre r et r dr. Cependant, il sélectionne uniquement les distances qui satisfont à la deuxième condition, dists <= r dr.
Raison de l'échec :
La fonction numpy Where renvoie les indices des éléments qui remplir une condition, pas des tableaux booléens. Lors de la combinaison de plusieurs instructions Where à l'aide d'opérateurs logiques, le résultat est une liste d'index qui répondent aux conditions respectives. L'exécution d'une opération and sur ces listes aboutit au deuxième ensemble d'indices, ignorant effectivement la première condition.
Approches correctes :
Pour appliquer plusieurs conditions, utilisez directement des comparaisons par éléments :
dists[(dists >= r) & (dists <= r + dr)]
Vous pouvez également créer des tableaux booléens pour chaque condition et effectuer des opérations logiques sur eux :
condition1 = dists >= r condition2 = dists <= r + dr result = dists[condition1 & condition2]
Une indexation sophistiquée permet également un filtrage conditionnel :
result = dists[(condition1) & (condition2)]
Dans certains cas, simplifier les conditions en un seul critère peut être avantageux, comme dans l'exemple suivant :
result = dists[abs(dists - r - dr/2.) <= dr/2.]
Par comprenant le comportement de la fonction Where, les programmeurs peuvent filtrer efficacement les tableaux en fonction de plusieurs conditions dans numpy.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!