Convert array of indices to 1-hot encoded numpy array

Let's say I have a 1d numpy array

    a = array([1,0,3])

I would like to encode this as a 2d 1-hot array

    b = array([[0,1,0,0], [1,0,0,0], [0,0,0,1]])

Is there a quick way to do this? Quicker than just looping over a to set elements of b, that is.

Your array a defines the columns of the nonzero elements in the output array. You need to also define the rows and then use fancy indexing:

    >>> a = np.array([1, 0, 3])
    >>> b = np.zeros((3, 4))
    >>> b[np.arange(3), a] = 1
    >>> b
    array([[ 0.,  1.,  0.,  0.],
           [ 1.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  1.]])

From: stackoverflow.com/q/29831489

Back to homepage or read more recommendations: