numpyにおける配列の配列型インデックスとブール型インデックス

3401 ワード

本稿ではIndexing-arraysを参照し,この文書を理解した上で,ブール型インデックスの理解を深めるために4次元ブール型インデックスをリストした.
1.配列型インデックス
元のデータのコピーであり、ビューではない配列型インデックスの配列.
配列型インデックスの値は整数でなければなりません.インデックスの各値は、インデックスの代わりに配列で使用される値を示します.ただし、インデックス値は境界を越えてはいけません.
>>> x=np.arange(10,1,-1)
>>> x[np.array([0,3,-1,8])]
array([10,7,2,2])

>>> #    ,         ,                     。
>>> x[np.array([[1,1],[2,3]])]  
array([[9,9],
       [8,7]]) 

 
2.多次元配列型インデックス
>>> y=np.arange(35).reshape(5,7)
>>> y[np.array([0,2,4]),np.array([0,1,2])]    #   y[[0,2,4],[0,1,2]]
array([0,15,30])

>>> #               ,              。 :
>>> y[np.array([0,2,4]),1]    
array([1,15,29])
>>> y[np.array([0,2,4])]
array([[0, 1, 2, 3, 4, 5, 6],
      [14,15,16,17,18,19,20],
      [28,29,30,31,32,33,34]])

 
3.ブールインデックス
配列型インデックスと比較して、ブール型インデックスはスライスとして異なる処理方式を有する.
ブールインデックスは、インデックス配列の初期次元と同じ形状を持つ必要があります.最もストレートな場合、ブール型インデックスは、インデックスされた配列と同じ形状を有する.
>>> b=y>20
>>> b
array([[False,False,False,False,False,False,False],
       [False,False,False,False,False,False,False],
       [False,False,False,False,False,False,False],
       [ True, True, True, True, True, True, True],
       [ True, True, True, True, True, True, True]])
>>> y[b]     #           
array([21,22,23,24,25,26,27,28,29,30,31,32,33,34])    #             ,                 。           ,           ,             。


>>> #  y     b   ,            。 :
>>> b[:,5]
array([False,False,False,True,True])
>>> y[b[:,5]]
array([[21,22,23,24,25,26,27],
       [28,29,30,31,32,33,34]])

>>> x=np.arange(30).reshape(2,3,5)
>>> b=np.array([[True,True,False],[False,True,True]])
>>> x[b]
array([[0,1,2,3,4],
       [5,6,7,8,9],
       [20,21,22,23,24],
       [25,26,27,28,29]])

4次元配列のブールインデックスは次のとおりです.
>>> z=np.arange(120).reshape(2,3,4,5)
>>> b2=np.array([True,False])
>>> z[b2]
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],
         [30, 31, 32, 33, 34],
         [35, 36, 37, 38, 39]],
        [[40, 41, 42, 43, 44],
         [45, 46, 47, 48, 49],
         [50, 51, 52, 53, 54],
         [55, 56, 57, 58, 59]]]])
>>> b3=np.array([[True,False,True],[False,True,False]])
>>> z[b3]
array([[[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]],
       [[40, 41, 42, 43, 44],
        [45, 46, 47, 48, 49],
        [50, 51, 52, 53, 54],
        [55, 56, 57, 58, 59]],
       [[80, 81, 82, 83, 84],
        [85, 86, 87, 88, 89],
        [90, 91, 92, 93, 94],
        [95, 96, 97, 98, 99]]])
>>> b4=np.array([[[False,False,True,False],
              [False,False,True,False],
              [False,False,True,False]],
             [[False,False,True,False],
              [False,False,True,False],
              [False,False,True,False]]])
>>> z[b4]
array([[ 10,  11,  12,  13,  14],
       [ 30,  31,  32,  33,  34],
       [ 50,  51,  52,  53,  54],
       [ 70,  71,  72,  73,  74],
       [ 90,  91,  92,  93,  94],
       [110, 111, 112, 113, 114]])