-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathstats1.py
executable file
·72 lines (57 loc) · 1.41 KB
/
stats1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/python
# Data structures and methods for analysis of data.
from __future__ import print_function
inf = float('inf')
class Sample(object):
def __init__(self, data=None):
self.num = 0
self.sum = 0
self.sum2 = 0
self.min = inf
self.max = -inf
if data:
self.update(data)
def add(self, v):
self.num += 1
self.sum += v
self.sum2 += v*v
self.min = min(self.min, v)
self.max = max(self.max, v)
def update(self, data):
for v in data:
self.add(v)
@property
def avg(self):
return float(self.sum) / self.num
@property
def var(self):
return (self.sum2 - float(self.sum * self.sum) / self.num) / self.num
@property
def dev(self):
return self.var ** 0.5
def __repr__(self):
return "Sample()"
def __str__(self):
if self.num:
return "num=%s sum=%s min/avg/max/dev=%s/%s/%s/%s" % (
self.num, self.sum, self.min, self.avg, self.max, self.dev)
else:
return "num=0 sum=0"
def getstate(self):
return (self.num, self.sum, self.sum2, self.min, self.max)
def setstate(self, state):
self.num, self.sum, self.sum2, self.min, self.max = state
#class Histogram:
# def Add(i):
# def Inc(i,v):
# def Count():
# def High():
# def Low():
# def Best():
# def Worst():
# def Median():
if __name__ == '__main__':
s = Sample()
s.add(1.0)
s.add(2.0)
print(s)