
2.7
ファンシーインデクス
79
In[5]: X = np.arange(12).reshape((3, 4))
X
Out[5]: array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
標準的なインデクスと同様に、
1
番目のインデクスは行を参照し、
2
番目のインデクスは列を参
照します。
In[6]: row = np.array([0, 1, 2])
col = np.array([2, 1, 3])
X[row, col]
Out[6]: array([ 2, 5, 11])
結果の最初の値は
X[0,2]
、
2
番目の値は
X[1,1]
、
3
番目の値は
X[2
、
3]
です。ファンシーインデ
クスにおけるインデクスの組み合わせは、「2.5 配列の計算:ブロー
ドキャスト」で説明したすべ
てのブロードキャストルールに従います。例えば、インデクス内に列ベクトルと行ベクトルを組み
合わせると、結果は
2
次元の配列となります。
In[7]: X[row[:, np.newaxis], col]
Out[7]: array([[ 2, 1, 3],
[ 6, 5, 7],
[10, 9, 11]])
算術演算のブロードキャストで見たのとまったく同じように、各行の値は各列ベクトルと一致し
ます。例えば次の計算を見てみましょう。
In[8]: row[:, np.newaxis] * col
Out[8]: array([[0, 0, 0],
[2, 1, 3],
[4, 2, 6]]) ...