From 67960f82c49741495e86e8ada98d685511942844 Mon Sep 17 00:00:00 2001 From: portnov Date: Mon, 19 May 2008 08:22:23 +0000 Subject: [PATCH] Add caching. Remove bogus sM2 statistics. --- stats.py | 57 ++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 34 insertions(+), 23 deletions(-) diff --git a/stats.py b/stats.py index 6e140f4..107d494 100755 --- a/stats.py +++ b/stats.py @@ -10,6 +10,27 @@ import gtk TMPPLOT = "/tmp/stats.plot" TMPPNG = "/tmp/stats.png" +cache = dict() + +def cached(func): + def wrapper(x): + i = id(x) + if func in cache: + if i in cache[func]: + return cache[func][i] + else: + t = func(x) + cache[func][i] = t + return t + else: + t = func(x) + cache[func] = {i: t} + return t + wrapper.__name__ = func.__name__ + return wrapper + +# cached = lambda f: f + class T(tuple): def __init__(self,*list): tuple.__init__(self,list) @@ -35,6 +56,7 @@ class T(tuple): def __repr__(self): return " ".join(["%.3f" % d for d in self]) +@cached def summ(data): r = None for t in data: @@ -44,6 +66,7 @@ def summ(data): r += t return r +@cached def uniq(data): r = dict() for n in data: @@ -53,6 +76,7 @@ def uniq(data): r[n] = 1 return r +@cached def probs(data): r = [] for i in range(len(data[0])): @@ -63,28 +87,19 @@ def probs(data): r.append(u) return r +@cached def mean(data): return summ(data)/len(data) +@cached def disp(data): m = mean(data) return summ([ (x-m)**2 for x in data]) / len(data) +@cached def sigma(data): return T(map(sqrt,disp(data))) -def stabmean(data): - p = probs(data) - r = [] - for ps in p: - p2 = dict() - for n in ps: - p2[n] = ps[n]**2 - s = sum(p2.values()) - m = summ([x*p2[x] for x in ps])/s - r.append(m) - return T(r) - def write_script(data,ms,ss): colors = ["red","blue","green","orange","darkblue","redorange","teal","oceanblue", "yelloworange", "purple"] def write_data(f,data): @@ -172,9 +187,8 @@ class GUI(object): self.vbox.pack_start(self.text) self.window.add(self.vbox) - def markup(self,M,D,s,sM): + def markup(self,M,D,s): global VARS - print VARS r = "" for i in range(len(M)): @@ -182,15 +196,13 @@ class GUI(object): var = VARS[i] except IndexError: var = "X%d" % (i+1) - r += """M%s: %.3f D%s: %.3f -sM%s: %.3f σ%s: %.3f - -""" % (var,M[i],var,D[i],var,sM[i],var,s[i]) + r += """M%s: %.3f D%s: %.3f σ%s: %.3f +""" % (var,M[i],var,D[i],var,s[i]) return r - def show(self,M,D,s,sM): + def show(self,M,D,s): self.img.set_from_file(TMPPNG) - self.text.set_markup(self.markup(M,D,s,sM)) + self.text.set_markup(self.markup(M,D,s)) self.window.show_all() gtk.main() @@ -219,15 +231,14 @@ if __name__ == "__main__": M = mean(data) D = disp(data) s = sigma(data) - sM = stabmean(data) write_script(data,M,s) os.system("ploticus -maxproclines 20000 -png %s -o %s" % (TMPPLOT,TMPPNG)) gui = GUI() - gui.show(M,D,s,sM) + gui.show(M,D,s) os.remove(TMPPLOT) os.remove(TMPPNG) - print "MX: %s, DX: %s, σX: %s, sMX: %s" % (M,D,s,sM) + print "MX: %s\nDX: %s\nσX: %s\n" % (M,D,s) -- 1.7.2.3