Explain the difference between
In [x]: a = np.array([6,6,6,7,7,7,7,7,7])
In [x]: a[np.random.randint(len(a), size=5)]
array([7, 7, 7, 6, 7]) # (for example)
and
In [x]: np.random.randint(6, 8, 5)
array([6, 6, 7, 7, 7]) # (for example)
The first case,
In [x]: a = np.array([6,6,6,7,7,7,7,7,7])
In [x]: a[np.random.randint(len(a), size=5)]
array([7, 7, 7, 6, 7]) # (for example)
Samples randomly from the array a
with replacement: for each item selected the probability of a 6 is $\frac{1}{3}$ and the probability of a 7 is $\frac{2}{3}$.
In the second case,
In [x]: np.random.randint(6, 8, 5)
array([6, 6, 7, 7, 7]) # (for example)
the numbers are drawn from $[6,7]$ uniformly, so the probabilities of each number being selected is $\frac{1}{2}$.