Conditions multiples dans la fonction Where de NumPy
Dans NumPy, la fonction Where() est couramment utilisée pour la sélection conditionnelle. Lorsque nous traitons de plusieurs conditions, il est important de comprendre comment les combiner efficacement pour obtenir les résultats souhaités.
Prenons un exemple dans lequel nous souhaitons sélectionner des distances dans une plage spécifiée. Le code suivant tente de le faire :
<code class="python">dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
Cependant, cela donne des résultats inattendus, en sélectionnant uniquement les distances dans la deuxième condition (np.where(dists <= r dr)).
Correction du code
Pour résoudre le problème, nous devons comprendre que np.where() renvoie les indices des éléments qui satisfont à la condition, pas un tableau booléen. Par conséquent, la combinaison des résultats de plusieurs appels np.where() ne donne pas lieu à un tableau booléen.
Nous pouvons utiliser des opérateurs booléens par éléments pour effectuer la sélection conditionnelle souhaitée à la place. Voici deux manières correctes de l'implémenter :
Option 1 : Combiner les conditions
<code class="python">dists[(dists >= r) & (dists <= r + dr)]
L'opérateur & exécute ET par élément, ce qui donne un tableau booléen. Nous pouvons ensuite l'utiliser pour indexer les listes du tableau d'origine.
Option 2 : Utiliser une variable intermédiaire
<code class="python">mask1 = dists >= r mask2 = dists <= r + dr dists[(mask1) & (mask2)]
En créant des variables temporaires pour chaque condition, nous pouvons vérifier les deux conditions et combinez-les à l'aide de l'opérateur & pour créer un tableau booléen.
Pourquoi le code d'origine n'a pas fonctionné
Le code d'origine n'a pas fonctionné car np .where() renvoie une liste d'index, pas un tableau booléen. La combinaison de deux listes d'indices ne donne pas le résultat souhaité.
Par exemple :
<code class="python">dists = np.arange(0, 10, 0.5) r = 5 dr = 1 mask1 = np.where(dists >= r) mask2 = np.where(dists <= r + dr) print(mask1 and mask2) # Outputs: (array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),)</code>
Comme vous pouvez le voir, le tableau résultant n'est pas un tableau booléen indiquant quels éléments satisfont aux deux conditions.
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!