2014-11-06 70 views
6

我想返回兩個值之間的python numpy數組中所有值的索引。這裏是我的代碼:如何返回numpy數組中兩個數字之間的值索引

inEllipseIndFar = np.argwhere(excessPathLen * 2 < ePL < excessPathLen * 3)

但它返回一個錯誤:

inEllipseIndFar = np.argwhere((excessPathLen * 2 < ePL < excessPathLen * 3).all()) 
ValueError: The truth value of an array with more than one element is ambiguous. Use 
a.any() or a.all() 

我想知道是否有這樣做沒有通過數組進行迭代的方式。謝謝!

回答

11

由於> < =回報掩蓋陣列,可以它們相乘得到你正在尋找的效果(基本上是邏輯AND):

>>> import numpy as np 
>>> A = 2*np.arange(10) 
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]) 

>>> idx = (A>2)*(A<8) 
>>> np.where(idx) 
array([2, 3]) 
4

您可以通過使用括號和正確的操作組合多個布爾表達式:

In [1]: import numpy as np 

In [2]: A = 2*np.arange(10) 

In [3]: np.where((A > 2) & (A < 8)) 
Out[3]: (array([2, 3]),) 

你也可以的np.where結果設置爲一個變量來提取值:

In [4]: idx = np.where((A > 2) & (A < 8)) 

In [5]: A[idx] 
Out[5]: array([4, 6]) 
+2

出於好奇,「True/False」數組的乘法與邏輯連接之間是否有區別? – Hooked 2014-11-06 18:48:41

+1

@Hooked - 並非如此,但我發現複合邏輯語句更具可讀性 – JoshAdel 2014-11-06 18:51:40