2014-11-06 9 views
6

Ich möchte die Indizes aller Werte in einem Python-numpy-Array, die zwischen zwei Werten liegen, zurückgeben. Hier ist mein Code:Wie man Indizes von Werten zwischen zwei Zahlen im numpy Array zurückgibt

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

Aber es gibt einen Fehler zurück:

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() 

Ich mag gerne wissen, ob es einen Weg gibt, dies zu tun, ohne durch das Array iterieren. Vielen Dank!

Antwort

11

Seit > < = Rückkehr maskiert Arrays, können Sie sie multiplizieren zusammen, um die Wirkung zu erzielen Sie suchen (im Wesentlichen die logische 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

Sie mehrere Boolesche Ausdrücke, die durch die Verwendung von Klammern und den korrekten Betrieb kombinieren :

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]),) 

Sie auch das Ergebnis der np.where einer variablen die Werte zu extrahieren einstellen:

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

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

Aus Neugier, gibt es einen Unterschied zwischen Multiplikation und logische Konjunktion für 'True/False' Arrays? – Hooked

+1

@Hooked - Nicht wirklich, aber ich finde die zusammengesetzten logischen Aussagen besser lesbar – JoshAdel

Verwandte Themen