【Python】How to generate one-hot encodings for an array in numpy? - 101 Numpy Exercises
Q:
One-hot encodingを計算しなさい (Kerasのnp_utils.to_categoricalを使えば良いのですが、Keras使わない時のためのメモ) Input:
arr = np.random.randint(1,4, size=6) arr #> array([2, 3, 2, 2, 2, 1])
Output:
#> array([[ 0., 1., 0.], #> [ 0., 0., 1.], #> [ 0., 1., 0.], #> [ 0., 1., 0.], #> [ 0., 1., 0.], #> [ 1., 0., 0.]])
A:
# Input: arr = np.random.randint(1,4, size=6) arr #> array([2, 3, 2, 2, 2, 1]) # Solution: def one_hot_encodings(arr): uniqs = np.unique(arr) out = np.zeros((arr.shape[0], uniqs.shape[0])) for i, k in enumerate(arr): out[i, k-1] = 1 return out one_hot_encodings(arr) #> array([[ 0., 1., 0.], #> [ 0., 0., 1.], #> [ 0., 1., 0.], #> [ 0., 1., 0.], #> [ 0., 1., 0.], #> [ 1., 0., 0.]]) # Method 2: (arr[:, None] == np.unique(arr)).view(np.int8)