2010-07-14 22 views
19

que tienen una serieCómo encontrar valores en una matriz que cumplen dos condiciones usando Python

a=[1,2,3,4,5,6,7,8,9] 

y quiero encontrar los índices de elemento s que cumplen dos condiciones, es decir,

a>3 and a<8 
ans=[3,4,5,6] 
a[ans]=[4,5,6,7] 

I puede utilizar numpy.nonzero(a>3) o numpy.nonzero(a<8) pero no numpy.nonzero(a>3 and a<8) que da el error:

ValueError: The truth value of an array with more than one element is 
ambiguous. Use a.any() or a.all() 

Cuando intento usar any o all obtengo el mismo error. ¿Es posible combinar dos pruebas condicionales para obtener la ans?

+1

por qué necesita numpy, no puede hacerlo de esta manera! filtrar (lambda a: 3 shahjapan

+1

@shahjapan - probablemente porque necesitan la mayor velocidad de una matriz numpy porque es probable que realmente tengan un conjunto de datos mucho * mucho * más grande. –

Respuesta

22
numpy.nonzero((a > 3) & (a < 8)) 

& tiene un elemento booleano y.

+0

Gracias Matthew, trabajó como un encanto! – David

3

Una alternativa (que terminé usando) es numpy.logical_and:

choice = numpy.logical_and(np.greater(a, 3), np.less(a, 8)) 
numpy.extract(choice, a) 
0

si se utiliza matriz numpy, puede utilizar directamente '&' en lugar de 'and'.

a=array([1,2,3,4,5,6,7,8,9]) a[(a>3) & (a<8)] ans=array([3,4,5,6])

Cuestiones relacionadas