Numpyのfancy indexingの概要


fancy indexingは概念的に簡単です.すなわち、インデックス配列を一度に複数の配列要素を得るために渡すことを指します.fancy indexingを使用する場合、特に注意しなければならないのは、返される配列のshapeがインデックスされた元の配列のshapeではなくインデックス配列のshapeを反映していることです.
e.g.1簡単な場合:一次元配列
>>>x = np.array([51 92 14 71 60 20 82 86 74 74])
>>>ind = [3,7,4]
>>>x[ind]
array([71,86,60])

e.g.2高度な使い方:多次元配列
>>>X = np.arange(12).reshape((3,4))
>>>X
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>row = np.array([0, 1, 2])
>>>col = np.array([2, 1, 3])
>>>X[row,col]
array([2, 5, 11]) #     2  X[0, 2]
#                       
>>>X[row[:, np.newaxis], col] #                 (  numpy broadcasting)
array([[ 2,  1,  3],
       [ 6,  5,  7],
       [10,  9, 11]])

参考資料:https://jakevdp.github.io/PythonDataScienceHandbook/02.07-fancy-indexing.html