Numpy Where Fonction avec plusieurs conditions
Lorsqu'il s'agit de tableaux, la fonction np.where dans NumPy peut être un outil utile pour sélectionner des éléments basés sur certaines conditions. Cependant, une confusion peut survenir lorsque vous essayez d'appliquer plusieurs conditions simultanément.
Considérez le scénario présenté dans la question : l'objectif est de sélectionner des distances dans une plage spécifiée à partir d'un tableau appelé distes. Le code suivant a été tenté :
dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
Cependant, ce code sélectionne uniquement les distances inférieures ou égales à r dr, pas les deux conditions. Pour comprendre pourquoi cela se produit, il est essentiel de noter que np.where renvoie une liste d'indices, pas un tableau booléen.
Corriger le code
La bonne façon de appliquer plusieurs conditions avec np.where consiste à créer un tableau booléen combiné à l'aide d'opérateurs par éléments (& pour AND, | pour OR), comme indiqué ci-dessous :
dists[(dists >= r) & (dists <= r + dr)]
Ou, si le résultat est spécifiquement nécessaire sous forme d'indices, utilisez la syntaxe suivante :
np.where((dists >= r) & (dists <= r + dr))
Pourquoi le code d'origine n'a pas fonctionné
La séquence de code impliquée dans la question d'origine a évalué deux séparer les conditions indépendamment : d'abord, les distances supérieures ou égales à r, puis les distances inférieures ou égales à r dr. Cependant, comme np.where renvoie des indices, la concaténation des résultats de ces deux conditions en utilisant et a abouti à la sélection uniquement des indices de la deuxième condition.
Pour créer un tableau booléen qui combine les conditions, élément par élément des opérateurs sont utilisés. Cela garantit que chaque élément du tableau est vrai ou faux en fonction des deux conditions simultanément.
Approche alternative
Une méthode alternative pour sélectionner les distances dans une plage consiste à utilisez l'indexation conditionnelle, comme démontré ci-dessous :
dists[abs(dists - (r + dr / 2.)) <= dr / 2.]
Cette option fournit une solution plus concise et lisible en créant un tableau booléen qui vérifie si chaque distance est dans une plage centrée sur r.
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!