1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import random
20 import operator
21
22 TESTDIST_NUM_ITERS=10000
23
25 - def __init__(self, values, probabilities):
26 self.values = values
27 self.probabilities = probabilities[:]
28 self.accumprobabilities = probabilities[:]
29 accum = 0.0
30 for i, prob in enumerate(self.probabilities):
31 accum += prob
32 self.accumprobabilities[i] = accum
33 self.numValues = len(self.values)
34
36 return reduce(operator.add, [x[0]*x[1] for x in zip(self.values, self.probabilities)])
37
39 pos = None
40 for i, p in enumerate(self.accumprobabilities):
41 if prob < p:
42 pos = i
43 break
44 return self.values[pos]
45
47 vals = []
48 histogram = {}
49 for v in self.values:
50 histogram[v]=0
51 for i in xrange(1,TESTDIST_NUM_ITERS):
52 v = self.get()
53 vals.append(v)
54 histogram[v] += 1
55
56 for k in histogram:
57 histogram[k] = float(histogram[k]) / float(TESTDIST_NUM_ITERS)
58
59 print histogram
60
61
62
64 - def __init__(self, values, probabilities):
66
69
70
78
79
82 self.min = float(min)
83 self.max = float(max)
84
86 l = []
87 for i in xrange(1, n):
88 l.append(self.get())
89 return l
90
97
99 - def __init__(self, min, max, mu, sigma):
103
105 valid = False
106 while not valid:
107 number = random.normalvariate(self.mu, self.sigma)
108 if number >= self.min and number <= self.max:
109 valid = True
110 return number
111
116
118 return random.paretovariate(self.alpha)
119