Как и в комментарии hpaulj, случайные функции Numpy могут возвращать numpy массивы. Это может устранить необходимость в любых явных циклах.
import numpy as np
n=10
a3 = np.random.randint(0,2, n) # The upper limit is exclusive so randint(0,1) is always 0
a2 = np.random.randint(0,50, n)
a1 = 100-a2-a3
a1
# array([77, 72, 81, 57, 84, 60, 97, 54, 52, 86])
a2
# array([23, 27, 19, 42, 16, 39, 2, 45, 48, 14])
a3
# array([0, 1, 0, 1, 0, 1, 1, 1, 0, 0])
Если вам нужен массив массивов:
np.stack((a1,a2,a3), axis=1)
# array([[77, 23, 0],
# [72, 27, 1],
# [81, 19, 0],
# [57, 42, 1],
# [84, 16, 0],
# [60, 39, 1],
# [97, 2, 1],
# [54, 45, 1],
# [52, 48, 0],
# [86, 14, 0]])