2017-03-15 108 views
0

我看到有人用布爾數組索引數組。我做了一些研究和測試,下面的代碼numpy數組索引布爾值

import numpy as np 
A=np.arange(30) 
A.shape = (10,3) 

這給矩陣

>>> A 
array([[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17], 
     [18, 19, 20], 
     [21, 22, 23], 
     [24, 25, 26], 
     [27, 28, 29]]) 

然後我做了這個

B = A<10 

這給

B=array([[ True, True, True], 
     [ True, True, True], 
     [ True, True, True], 
     [ True, False, False], 
     [False, False, False], 
     [False, False, False], 
     [False, False, False], 
     [False, False, False], 
     [False, False, False], 
     [False, False, False]], dtype=bool) 

而且

A[B] 
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

這裏是我的問題,我通過輸入完全相同的陣列,而不是把變量B嘗試這樣做,它原來是一個錯誤

>>> A[[[ True, True, True], 
...  [ True, True, True], 
...  [ True, True, True], 
...  [ True, False, False], 
...  [False, False, False], 
...  [False, False, False], 
...  [False, False, False], 
...  [False, False, False], 
...  [False, False, False], 
...  [False, False, False]]] 
Traceback (most recent call last): 
    File "<stdin>", line 10, in <module> 
IndexError: too many indices for array 

我做了什麼錯,有什麼區別?

由於

+1

在正在輸入作爲列表中的第二方法,該方法不執行布爾掩蔽與第一方法'A [ B]'。 – Divakar

+0

在某些情況下,使用數組和列表建立索引是相同的,但這不是其中之一。 – hpaulj

回答

0

B是一個數組但[ True, False, .. ]是一個列表。

這是相同的:

A[np.array([[ True, True, True], 
      [ True, True, True], 
      [ True, True, True], 
      [ True, False, False], 
      [False, False, False], 
      [False, False, False], 
      [False, False, False], 
      [False, False, False], 
      [False, False, False], 
      [False, False, False]])] 
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
+0

謝謝,它現在非常有意義。 – ted

1

使用:

A[np.array([[ True, True, True], 
    [ True, True, True], 
    [ True, True, True], 
    [ True, False, False], 
    [False, False, False], 
    [False, False, False], 
    [False, False, False], 
    [False, False, False], 
    [False, False, False], 
    [False, False, False]])]