In [20]:
%matplotlib inline
import random
import itertools
import bisect
import numpy as np
import matplotlib.pyplot as plt
weights = [0.2, 0.5, 0.3]
cumdist = list(itertools.accumulate(weights))
samples = []
for i in range(1000):
x = random.random() * cumdist[-1]
k = bisect.bisect(cumdist, x)
samples.append(k)
plt.hist(samples)
Out[20]: