2012-03-27 135 views
5

我是使用numpy的新手,有一件事我真的不明白索引數組。使用numpy將布爾數組索引到多維數組中

tentative tutorial有這樣的例子:

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

我不知道爲什麼它是最後一件事。任何人都可以向我解釋?

謝謝!

回答

4

你的陣列包括:

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

一個索引的方式,將使用整數列表,指定哪個行/列包括:

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

含義:第1行第0列,第2行第2列

當您使用布爾指數時,您要告訴哪些行/列要包含哪些列:

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

正如您所看到的,這相當於上面顯示的i1i2。因此,a[b1,b2]將有相同的結果。

還應注意,上述操作是唯一可能的,因爲這兩個b1b2具有相同數量的True值(因此,它們代表在整數形式表示當相同長度的兩個陣列)。

+0

+1這裏是一個鏈接,供進一步閱讀,http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html – 2012-03-27 06:24:24