I have a sequence s = [4,3,1,0,5] and num_classes = 6 and I want to generate a Numpy matrix m of shape (len(s), num_classes)
You can use broadcasting -
(np.array(s)[:,None]==np.arange(num_classes))+0
Sample run -
In [439]: s
Out[439]: [4, 3, 1, 0, 5]
In [440]: num_classes = 9
In [441]: (np.array(s)[:,None]==np.arange(num_classes))+0
Out[441]:
array([[0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0]])