Sumitava Mukherjee wrote: > Hi all, > I need to randomly sample from a list where all choices have weights > attached to them. The probability of them being choosen is dependent > on the weights. > If say Sample list of choices are [A,B,C,D,E] and weights of the same > are [0.895,0.567,0.765,0.890,0.60] when I draw (say 2) samples then I > want the likeliness of them being chosen be in the order : D>A>C>E>B > > In short I mean if prob of a H is .9 and probability of T be 0.1 then > if I draw 10 samples, 9 should be H and 1 should be T. > > I coudn't find a function in the module random that does so. > Please can someone guide me how the above could be implemented [either > through some function which exists and I don't know or pointers to > some code snippets which does so]?
I've usually used something like (untested): def chooser (objects, weights): total = 0.0 for obj, weight in zip (objects, weights): total += weight if weight < total * random.random(): chosen = obj return chosen Works fine if runtime is not a great concern. Mel. -- http://mail.python.org/mailman/listinfo/python-list