import random
items = [(10, "low"),
(100, "mid"),
(890, "large")]
w = [10, 100, 890]
v = ["low", "mid", "large"]
def weighted_sample(ws, vs, n):
total = float(sum(w for w in ws))
i = 0
w = ws[0]
v = vs[0]
while n:
x = total * (1 - random.random() ** (1.0 / n))
total -= x
while x > w:
x -= w
i += 1
w = ws[i]
v = vs[i]
w -= x
yield v
n -= 1
for i in weighted_sample(w, v, 500):
print i
Tuesday, August 17, 2010
Sampling With Replacement Using Weights in Python
Here is the Python function corresponding to sample() call in R. We based it on the code here; only changed it so that the inputs use seperate weight and value vectors instead of one vector that has tuples of weight, value pairs.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment