2012-03-27 21 views
5

Jestem nowy w używaniu numpy i jedną z rzeczy, których naprawdę nie rozumiem jest indeksowanie tablic.Indeksowanie za pomocą tablic boolowskich na tablice wielowymiarowe za pomocą numpy

W tentative tutorial jest to przykład:

>>> a = arange(12).reshape(3,4) 
>>> b1 = array([False,True,True])    # first dim selection 
>>> b2 = array([True,False,True,False])  # second dim selection 
>>> 
>>> a[b1,b2]         # a weird thing to do 
array([ 4, 10]) 

nie mam pojęcia, dlaczego to robi to ostatnia rzecz. Czy ktoś może mi to wyjaśnić?

Dzięki!

Odpowiedz

4

Twoja tablica składa się z:

0 1 2 3 
4 5 6 7 
8 9 10 11 

jeden sposób indeksowania byłoby podstawie listy liczb całkowitych, określającą, które wiersze/kolumny obejmuje:

>>> i1 = [1,2] 
>>> i2 = [0,2] 
>>> a[i1,i2] 
array([ 4, 10]) 

Znaczenie: wiersz 1 kolumna 0 , wiersz 2 kolumna 2

Gdy używasz indeksów logicznych, mówisz, które wiersze/kolumny mają zawierać, a które nie:

>>> b1 = [False,True,True]  # 0:no, 1:yes, 2:yes  ==> [1,2] 
>>> b2 = [True,False,True,False] # 0:yes, 1:no, 2:yes, 3:no ==> [0,2] 

Jak widać, jest to odpowiednik przedstawionych powyżej i1 i i2. W związku z tym a[b1,b2] będzie miał taki sam wynik.

Należy również zauważyć, że operacja powyżej jest możliwe tylko dlatego, że zarówno b1 i b2 mają taką samą liczbę wartości True (tak, stanowią dwie macierze o tej samej długości, gdy wyrażone w postaci liczby całkowitej).

+0

+1 Oto link do dalszego czytania, http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html –

Powiązane problemy