2012-03-27 14 views
5

Ich bin neu in der Verwendung von numpy und eine Sache, die ich wirklich nicht verstehe, ist die Indizierung von Arrays.Indizierung mit booleschen Arrays in multidimensionale Arrays mit numpy

Im tentative tutorial gibt es dieses Beispiel:

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

Ich habe keine Ahnung, warum es funktioniert das letzte, was. Kann mir das jemand erklären?

Danke!

Antwort

4

Ihr Array besteht aus:

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

Eine Möglichkeit zur Indexierung wäre es eine Liste von ganzen Zahlen werden verwendet, anzugeben, die Zeilen/Spalten enthalten:

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

Bedeutung: Zeile 1, Spalte 0 , Zeile 2 Spalte 2

Wenn Sie boolesche Indizes verwenden, geben Sie an, welche Zeilen/Spalten eingeschlossen werden sollen und welche nicht:

Wie Sie sehen können, entspricht dies den oben gezeigten i1 und i2. Daher wird a[b1,b2] das gleiche Ergebnis haben.

beachte auch, dass der Betrieb oben ist nur möglich, weil beide b1b2 und die gleiche Anzahl von True Werten haben (so stellen sie zwei Anordnungen von der gleichen Länge, wenn in der Integer-Form ausgedrückt).

+0

+1 Hier ist ein Link zum Weiterlesen, http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html –