Comment filtrer des tableaux Numpy avec plusieurs conditions : pourquoi `np.where()` échoue et comment obtenir des résultats corrects ?

Barbara Streisand
Libérer: 2024-10-26 10:27:02
original
292 Les gens l'ont consulté

 How to Filter Numpy Arrays with Multiple Conditions: Why `np.where()` Fails and How to Achieve Correct Results?

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

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 :

  • Élément- Comparaison judicieuse :

Pour appliquer plusieurs conditions, utilisez directement des comparaisons par éléments :

dists[(dists >= r) & (dists <= r + dr)]
Copier après la connexion
  • Tableaux booléens :

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]
Copier après la connexion
  • Indexation sophistiquée :

Une indexation sophistiquée permet également un filtrage conditionnel :

result = dists[(condition1) & (condition2)]
Copier après la connexion

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

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!

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