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

Mary-Kate Olsen
Libérer: 2024-10-27 00:59:30
original
270 Les gens l'ont consulté

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))]
Copier après la connexion

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)]
Copier après la connexion

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)]
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!