176 votes

Tableau Numpy, comment sélectionner des index répondant à plusieurs conditions?

Supposons que j'ai un tableau numpy x = [5, 2, 3, 1, 4, 5] , y = ['f', 'o', 'o', 'b', 'a', 'r'] . Je souhaite sélectionner les éléments en y correspondant aux éléments en x supérieurs à 1 et inférieurs à 5.

j'ai essayé

 x = array([5, 2, 3, 1, 4, 5])
y = array(['f','o','o','b','a','r'])
output = y[x > 1 & x < 5] # desired output is ['o','o','a']
 

mais ça ne marche pas. Comment je ferais ça?

245voto

J.F. Sebastian Points 102961

Votre expression fonctionne si vous ajoutez des parenthèses:

 >>> y[(1 < x) & (x < 5)]
array(['o', 'o', 'a'], 
      dtype='|S1')
 

40voto

Mark Mikofski Points 2503

OMI, l'OP n'est pas réellement le souhaitez np.bitwise_and() (aka &) mais, en fait, veut np.logical_and() parce qu'ils sont en comparant des valeurs logiques telles que True et False - voir cette SORTE de post sur la logique contre au niveau du bit pour voir la différence.

>>> x = array([5, 2, 3, 1, 4, 5])
>>> y = array(['f','o','o','b','a','r'])
>>> output = y[np.logical_and(x > 1, x < 5)] # desired output is ['o','o','a']
>>> output
array(['o', 'o', 'a'],
      dtype='|S1')

Et équivalents façon de le faire est avec np.all() par réglage de l' axis argument de manière appropriée.

>>> output = y[np.all([x > 1, x < 5], axis=0)] # desired output is ['o','o','a']
>>> output
array(['o', 'o', 'a'],
      dtype='|S1')

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