array([[1., 1., 1., 1., 1., 1.],
[1., 1., 0., 0., 0., 0.],
[1., 0., 0., 0., 0., 0.],
[1., 1., 1., 1., 1., 0.],
[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 0., 0., 0.]])
x_large = np.random.randint(1, 7, 100000)
max_ = 6
%timeit np.flip(np.flip(np.eye(max_)[x_large.ravel()-1], 1).cumsum(1), 1)
# 6.71 ms ± 68.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)