Maison  >  Article  >  développement back-end  >  Comment sélectionner des éléments d'un tableau Numpy satisfaisant plusieurs conditions à l'aide de la fonction « où » ?

Comment sélectionner des éléments d'un tableau Numpy satisfaisant plusieurs conditions à l'aide de la fonction « où » ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-27 19:15:01451parcourir

How to Select Elements from a Numpy Array Satisfying Multiple Conditions using the `where` Function?

Fonction Numpy Where et conditions multiples

Cette question concerne la fonction Numpy Where et la sélection d'éléments en fonction de plusieurs conditions.

Description du problème et du problème

L'utilisateur souhaite appliquer deux conditions (supérieure à et inférieure à) pour sélectionner des éléments d'un tableau (dists) qui se situent dans une plage spécifique. Cependant, l'utilisation de la fonction Where comme (np.where(dists >= r)) et (np.where(dists <= r dr)) entraîne des résultats inattendus.

Solution

Méthode 1 : Combiner les conditions en un seul critère

Dans ce cas précis, il est recommandé de combiner les deux conditions en un seul critère :

dists[abs(dists - r - dr/2.) <= dr/2.]

Cette approche simple vérifie si la valeur absolue de la différence entre les distes et le centre de la plage (r dr/2) est inférieure ou égale à la moitié de la largeur de la plage (dr/2).

Méthode 2 : Utilisation de l'indexation sophistiquée

Alternativement, on peut utiliser une indexation sophistiquée pour sélectionner des éléments directement à partir du tableau d'origine à l'aide d'un masque booléen :

dists[(dists >= r) & (dists <= r + dr)]

L'avantage de ceci La méthode est qu'elle utilise des opérateurs logiques par éléments (& et |) pour combiner les conditions, ce qui donne un masque binaire qui identifie les éléments satisfaisant aux critères.

Explication du problème

L'approche originale utilisant (np.where(dists >= r)) et (np.where(dists <= r dr)) échoue car np.where renvoie une liste d'indices, pas un tableau booléen. Faire un anding entre deux listes de nombres entraîne l'évaluation de la deuxième liste, et non une comparaison logique.

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