[NumPy] 9. ファンシーインデックス

NumPy

はじめに

整数配列をインデックスとして用いることで配列の要素を自由に取り出すことのできるファンシーインデックスの使い方について説明する。

1次元配列のファンシーインデックス

データの生成

np.linspace()で0〜10の整数をもつ配列を生成する。

インデックスのリストによるアクセス

インデックスのリストを作成して、そのリストを配列に適用することで、インデックスに対応する配列の要素を参照できる。

マイナスの整数リストによるアクセス

マイナスの整数を要素としてもつリストを配列に適用した場合、スライスの場合と同様に最後尾からのインデックスの要素が得られる。

2次元配列をインデックスとして用いる場合

2次元配列をインデックスとして配列(X)に適用すると、インデックスの配列と同じ形状の配列が得られる。

np.takeによる要素の取得

np.takeを用いることでも上記と同じ結果を得ることができる。

2次元配列のファンシーインデックス

データの生成

np.arange(16).reshape(4,4)で0〜15の配列を作って、reshapeで4×4の形にしている。

行、列のインデックスを指定

rowの行のインデックス、colに列のインデックスを設定して、[row,col]を配列に適用する。
row=col =[0,1,2,3]であるため、
1コ目の要素は0行目0列目の0,
2コ目の要素は1行目1列目の5,
3コ目の要素は2行目2列目の10、
4コ目の要素は2行目2列目の15となる。

インデックスにブロードキャストを適用

まず、配列rowに対して、[:,np.newaxis]とすることで、形状を(4,1)とした配列を得る。

インデックスに[(1,4),(4,1)]の形状のものを指定することでインデックスがブロードキャストされる。
そのため、返ってくる配列の形状は(4,4)となる。

ブロードキャストについては下記で詳しく説明した。

[NumPy] 7. ブロードキャスト
NumPyによるブロードキャストをボクセルグラフで視覚的に示す。

参考

Numpyのファンシーインデックス(Fancy Index)で配列を自由に操作する - Qiita
#やりたいことNumpyのndarrayに備え付けられているファンシーインデックスという機能を使ってリストより自由に配列を操作してみる#環境Python3.6.3Linux Mint MAT…
Indexing routines — NumPy v1.26 Manual

コメント