Home > Mobile >  Random sample without repetition but probability
Random sample without repetition but probability

Time:04-07

I am somehow missing a function in python which is a combination of two I know. I have a list of numbers and probabilities for those and want to chose n of them, without repetition.

random.sample can chose from a list without repetition, but does not allow probabilities:

l = [5,124,6,2,7,1]
sample(l,k=5)

On the other hand, choices allows me to use weights, but uses repetition:

choices(l,k=2,weights=[0.5,0.25,0.25,0.125,0,0.125])

Is there any chance how do to that in combination? Until now I run a while-loop doing choices so often until the number of uniquely chosen elements becomes k. But this is quite inefficient, in particular of one element has big probability.

CodePudding user response:

numpy.random.choice works. Use:

import numpy as np

l = [5,124,6,2,7,1]
weights=[0.5,0.25,0.25,0.125,0,0.125]
weights = [w/sum(weights) for w in weights]
np.random.choice(l, size=5, replace=False, p=weights)

Edited to make probabilities sum to 1

  • Related