faqts : Computers : Programming : Languages : Python : Snippets : Maths

+ Search
Add Entry AlertManage Folder Edit Entry Add page to http://del.icio.us/
Did You Find This Entry Useful?

3 of 5 people (60%) answered Yes
Recently 2 of 4 people (50%) answered Yes

Entry

Choosing random numbers with weights/probability

Jul 5th, 2000 10:02
Nathan Wallace, unknown unknown, Hans Nowak, Snippet 240, Evan Simpson


"""
Packages: maths.random
"""
"""
>I've been using the whrandom.choice routine and it's very
>useful. But is there any way to add weights or
>probabilities of being chosen to the items in the list?
>example:
>list=['one','two','three']
>item=whrandom.choice(list)
>Is there any way to say that 'one' and 'two' have a 25%
>chance of being chosen, and 'three' has a 50% chance?
In this simple case, you could use:
"""
import whrandom # added by PSST
list = ["one", "two", "three"]
weighted = [0, 1, 2, 2]
item = list[whrandom.choice(weighted)]
"""
If you really need arbitrary weights, try:
"""
list = [('one', 0.25), ('two', 0.25), ('three', 0.5)]
def weighted_choice(list):
  from whrandom import uniform
  n = uniform(0, 1)
  for item, weight in list:
    if n < weight:
      break
    n = n - weight
  return item