2014-11-06 20 views
6

Chciałbym zwrócić indeksy wszystkich wartości w tablicy Pythona numpy, które są między dwiema wartościami. Tu jest mój kodu:Jak zwracać indeksy wartości między dwiema liczbami w tablicy numpy

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

Ale zwraca błąd:

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

Chciałabym wiedzieć, czy istnieje sposób to zrobić bez iteracja tablicy. Dzięki!

Odpowiedz

11

Od > < = obie zamaskowanych tablic, można pomnożyć je razem, aby uzyskać efekt, którego szukasz (w zasadzie logiczne i):

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

Można połączyć kilka wyrażeń logicznych za pomocą nawiasów i prawidłowe działanie :

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

można również ustawić wynik np.where do zmiennej, aby wyodrębnić wartości:

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

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

Z ciekawości, czy istnieje jakaś różnica między mnożeniem i logiczną spójnością dla tablic "Prawda/Fałda"? – Hooked

+1

@Hooked - Nie bardzo, ale uważam, że złożone instrukcje logiczne są bardziej czytelne – JoshAdel

Powiązane problemy