Maison  >  Article  >  développement back-end  >  Comment combiner efficacement plusieurs conditions dans la fonction Where de NumPy ?

Comment combiner efficacement plusieurs conditions dans la fonction Where de NumPy ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 00:59:30262parcourir

How to Effectively Combine Multiple Conditions in NumPy's where Function?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn