1 from __future__ import absolute_import, division
6 def median(x, use_float=True):
7 # there exist better algorithms...
10 raise ValueError('empty sequence!')
11 left = (len(y) - 1)//2
13 sum = y[left] + y[right]
30 def clip(x, (low, high)):
46 raise ValueError('p must be in the interval (0.0, 1.0]')
49 return int(math.log1p(-random.random()) / math.log1p(-p)) + 1
54 for k, v in d.iteritems():
55 res[k] = res.get(k, 0) + v
56 return dict((k, v) for k, v in res.iteritems() if v)
61 while x >= 100000 and count < len(prefixes) - 2:
64 s = '' if count == 0 else prefixes[count - 1]
65 return '%i' % (x,) + s
70 if random.random() >= b:
92 y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*math.exp(-x*x)
93 return sign*y # erf(-x) = -erf(x)
95 def ierf(z, steps=10):
97 for i in xrange(steps):
98 d = 2*math.e**(-guess**2)/math.sqrt(math.pi)
99 guess = guess - (erf(guess) - z)/d
102 def binomial_conf_interval(x, n, conf=0.95):
103 # approximate - Wilson score interval
104 z = math.sqrt(2)*ierf(conf)
107 topb = z * math.sqrt(p*(1-p)/n + z**2/4/n**2)
109 return (topa - topb)/bottom, (topa + topb)/bottom
111 def interval_to_center_radius((low, high)):
112 return (high+low)/2, (high-low)/2
114 if __name__ == '__main__':
118 print a, format(a) + 'H/s'
119 a = a * random.randrange(2, 5)