Convert array of indices to one-hot encoded array in NumPy
--------------------------------------------------
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Sunrise at the Stream
--
Chapters
00:00 Convert Array Of Indices To One-Hot Encoded Array In Numpy
00:18 Accepted Answer Score 545
00:38 Answer 2 Score 280
00:47 Answer 3 Score 59
01:02 Answer 4 Score 56
01:35 Thank you
--
Full question
https://stackoverflow.com/questions/2983...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #numpy #machinelearning #numpyndarray #onehotencoding
#avk47
    Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Sunrise at the Stream
--
Chapters
00:00 Convert Array Of Indices To One-Hot Encoded Array In Numpy
00:18 Accepted Answer Score 545
00:38 Answer 2 Score 280
00:47 Answer 3 Score 59
01:02 Answer 4 Score 56
01:35 Thank you
--
Full question
https://stackoverflow.com/questions/2983...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #numpy #machinelearning #numpyndarray #onehotencoding
#avk47
ACCEPTED ANSWER
Score 545
Create a zeroed array b with enough columns, i.e. a.max() + 1.
Then, for each row i, set the a[i]th column to 1.
>>> a = np.array([1, 0, 3])
>>> b = np.zeros((a.size, a.max() + 1))
>>> b[np.arange(a.size), a] = 1
>>> b
array([[ 0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.]])
ANSWER 2
Score 280
>>> values = [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.]])
ANSWER 3
Score 59
In case you are using keras, there is a built in utility for that:
from keras.utils.np_utils import to_categorical   
categorical_labels = to_categorical(int_labels, num_classes=3)
And it does pretty much the same as @YXD's answer (see source-code).
ANSWER 4
Score 56
Here is what I find useful:
def one_hot(a, num_classes):
  return np.squeeze(np.eye(num_classes)[a.reshape(-1)])
Here num_classes stands for number of classes you have. So if you have a vector with shape of (10000,) this function transforms it to (10000,C). Note that a is zero-indexed, i.e. one_hot(np.array([0, 1]), 2) will give [[1, 0], [0, 1]].
Exactly what you wanted to have I believe.
PS: the source is Sequence models - deeplearning.ai