What is an efficient way to sample N numbers, where each number is a sampled by first choosing a random distribution from within a fixed predetermined list (using some specific discrete distribution), and then sampling from that chosen distribution.
So, for instance, if we want to choose 0 with probability 0.30, 1 with probability 0.30, and with probability 0.40 we want to choose any real number in [0,1)
with uniform distribution, we can write:
np.choose(
np.random.choice(2, size=N, p=[0.6, 0.4]),
np.vstack((
np.random.choice(2, size=(1,N)),
np.random.uniform(size=(1,N))
)))
However this generates N
xD
random numbers (where D
is the number of distributions) and uses N
xD
space. Is there a more efficient vectorized (i.e no O(N)
python for-loops) way of achieving this?
If not in the general case, can the above specific combined distribution be somehow efficiently generated otherwise?
Aucun commentaire:
Enregistrer un commentaire