表題だけではよくわからないが、以下のような場合に使う。
たとえばクラス分類のためのターゲットのデータセットが以下のように与えられているとする。
1 2 3 4 5 6 |
import numpy as np y = np.array([2, 1, 1, 0, 2, 2, 0, 0, 0, 1, 0, 2]) print(y) # [2 1 1 0 2 2 0 0 0 1 0 2] |
このとき、クラス0~2に対応する以下のような名前で表現したターゲット配列を得ることができるというもの。
1 2 3 4 |
names = np.array(["one", "two", "three"]) print(names[y]) # ['three' 'two' 'two' 'one' 'three' 'three' 'one' 'one' 'one' 'two' 'one' 'three'] |
順を追って考えてみるのに、まずnames配列から一つの要素を取り出す。
1 2 3 4 |
names = np.array(["zero", "one", "two"]) print(names[0], names[1], names[2]) # zero one two |
配列の要素をリストとすると、そのリストの要素をインデックスとみなして、インデックスに対応する元の配列の要素を並べた配列を返す。結果はリストではなくndarray。
1 2 3 |
print(names[[0, 1, 2, 0]]) # ['zero' 'one' 'two' 'zero'] |
配列の要素を配列としても同じように動作する。
1 2 3 |
print(names[np.array([2, 1, 0, 2])]) # ['two' 'one' 'zero' 'two'] |
これより、クラス分類のターゲット配列などが与えられたときに、これを番号ではなくクラス名などの配列に変換することができる。
1 2 3 4 |
y = np.array([1, 1, 0, 1, 0, 0]) print(names[y]) # ['one' 'one' 'zero' 'one' 'zero' 'zero'] |
なお、インデックス配列が2次元の場合は結果の配列も2次元となる。
1 2 3 4 5 6 7 8 |
z = np.array([ [0, 1, 2], [1, 2, 0] ]) print(names[z]) # [['zero' 'one' 'two'] # ['one' 'two' 'zero']] |