2010-07-14 5 views
19

Ich habe ein ArrayWie finden Werte in einem Array, das zwei Bedingungen unter Verwendung von Python erfüllen

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

und ich möchte die Indizes des Elements s zu finden, erfüllen zwei Bedingungen, wie zB

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

I können numpy.nonzero(a>3) oder numpy.nonzero(a<8) aber nicht numpy.nonzero(a>3 and a<8), die den Fehler verursacht:

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

Wenn ich versuche, any oder all zu verwenden, erhalte ich den gleichen Fehler. Ist es möglich, zwei bedingte Tests zu kombinieren, um das ans zu bekommen?

+1

warum Sie numpy benötigt, können Sie es wie auf diese Weise nicht tun können! Filter (Lambda a: 3 shahjapan

+1

@shahjapan - wahrscheinlich, weil sie die erhöhte Geschwindigkeit eines numpigen Arrays benötigen, weil sie wahrscheinlich einen viel * viel * größeren Datensatz haben. –

Antwort

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

& tut ein Element-boolean und.

+0

Dank Matthew, arbeitete wie ein Charme! – David

3

Eine Alternative (die ich am Ende mit) ist numpy.logical_and:

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

wenn Sie numpy Array verwenden, können Sie direkt '&' anstelle von 'and' verwenden können.

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

Verwandte Themen