2010-07-14 76 views
19

兩個條件如何找到值我有一個數組在陣列滿足使用Python

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

,我想找到的元s的滿足兩個條件,即

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

我的指數可以使用numpy.nonzero(a>3)numpy.nonzero(a<8) 但不 numpy.nonzero(a>3 and a<8)這給錯誤:

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

當我嘗試使用anyall時,我得到相同的錯誤。 是否可以結合兩個條件測試來獲得答案?

+1

爲什麼你需要numpy,你不能這樣做!過濾器(lambda a:3 shahjapan 2010-07-14 17:41:30

+1

@shahjapan - 可能是因爲它們需要增加一個numpy數組的速度,因爲它們可能真的有很多大得多的數據集。 – 2010-07-14 17:59:36

回答

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

&做一個元素明智的布爾和。

+0

謝謝馬修,工作就像一個魅力! – David 2010-07-14 17:11:27

3

一種替代(我結束了使用)是numpy.logical_and

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

如果使用numpy的陣列,則可以直接使用 '&' 而不是 'and'。

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