2017-07-07 6 views
0

Je peux obtenir numpy.where() de travailler pour une condition mais pas deux conditions.Cette approche de numpy.where() peut-elle être adaptée à deux conditions au lieu d'une?

Pour une condition:

import numpy as np 

a = np.array([1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 1, 1, 1, 2, 4, 5]) 
i, = np.where(a < 2) 
print(i) 
>> [ 0 5 8 10 11 12] ## indices where a[i] = 1 

Pour deux conditions:

# condition = (a > 1 and a < 3) 
# i, = np.where(condition) 
i, = np.where(a > 1 and a < 3) 
print(i) 
>> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

j'ai lu sur a.any() et a.all()in this other SO post, mais cela ne fonctionne pas pour mon but depuis que je veulent tous les indices qui correspondent à la condition plutôt qu'une seule valeur booléenne.

Existe-t-il un moyen de l'adapter à deux conditions?

+0

Cette erreur de valeur est produite lorsque vous utilisez un tableau booléen dans un contexte scalaire comme un 'if', ou dans ce cas' la et' de Python. Utilisez '&' à la place. Et contrôlez l'ordre des opérateurs avec '()'. – hpaulj

Répondre

2

Utilisez np.where((a > 1) & (a < 3))