227 votes

Fonction Numpy where à conditions multiples

J'ai un tableau de distances appelé dists . Je veux sélectionner dists qui se situent dans une fourchette.

 dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]

Cependant, cela ne sélectionne que pour la condition

 (np.where(dists <= r + dr))

Si je fais les commandes séquentiellement en utilisant une variable temporaire, cela fonctionne bien. Pourquoi le code ci-dessus ne fonctionne-t-il pas, et comment puis-je le faire fonctionner ?

4voto

J'aime utiliser np.vectorize pour de telles tâches. Considérez ce qui suit :

>>> # function which returns True when constraints are satisfied.
>>> func = lambda d: d >= r and d<= (r+dr) 
>>>
>>> # Apply constraints element-wise to the dists array.
>>> result = np.vectorize(func)(dists) 
>>>
>>> result = np.where(result) # Get output.

Vous pouvez également utiliser np.argwhere au lieu de np.where pour une sortie claire.

4voto

Xiong-Hui Chen Points 101

Essayez :

import numpy as np
dist = np.array([1,2,3,4,5])
r = 2
dr = 3
np.where(np.logical_and(dist> r, dist<=r+dr))

Sortie : (array([2, 3, 4]),)

Vous pouvez voir Fonctions logiques pour plus de détails.

2voto

Xin Wang Points 21

Essayez :

np.intersect1d(np.where(dists >= r)[0],np.where(dists <= r + dr)[0])

0voto

antitrust Points 4853

J'ai élaboré cet exemple simple

import numpy as np

ar = np.array([3,4,5,14,2,4,3,7])

print [X for X in list(ar) if (X >= 3 and X <= 6)]

>>> 
[3, 4, 5, 4, 3]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X