numpyのone-hot

2018 ワード

a = np.array([1, 0, 3])# ,one-hot 
n_class = a.max() + 1
n_sample = a.shape[0]
b = np.zeros((n_sample, n_class))#34 
b[:, a] = 1# 1
b

array([[ 0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.]])
>>>

npを使用する.eyeはM*N行列を生成し、後の配列は1オフセットの位置を説明する
values = np.array([1, 0, 3])
n_values = np.max(values) + 1
np.eye(n_values)[values]

array([[ 0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.]])

たとえば
np.eye(4,3)[np.array([1, 1, 1, 1])]

array([[ 0.,  1.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  1.,  0.]])
values = np.array([1, 0, 3,1,2,1,2])
n_values = np.max(values) + 1
np.eye(n_values)[values]

array([[ 0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.]])