# HG changeset patch # User Nicolas Saunier # Date 1303169513 14400 # Node ID 7f1e54234f96cd2a7168a0e6b70eec672b0b1f57 # Parent 731df2fa00106395bbf6a1a6844313d6ed3affcd added empirical discrete distribution, modified class organization and names diff -r 731df2fa0010 -r 7f1e54234f96 python/utils.py --- a/python/utils.py Tue Mar 29 01:47:00 2011 -0400 +++ b/python/utils.py Mon Apr 18 19:31:53 2011 -0400 @@ -23,7 +23,35 @@ result += ((e-o)*(e-o))/e return result -class empiricalDistribution: +class EmpiricalDistribution: + def nSamples(self): + return sum(self.counts) + + +class EmpiricalDiscreteDistribution(EmpiricalDistribution): + '''Class to represent a sample of a distribution for a discrete random variable + ''' + def __init__(self, categories, counts): + self.categories = categories + self.counts = counts + + def mean(self): + from numpy.core.fromnumeric import sum + result = [float(x*y) for x,y in zip(self.categories, self.counts)] + return sum(result)/self.nSamples() + + def var(self, mean = None): + from numpy.core.fromnumeric import sum + if not mean: + m = self.mean() + else: + m = mean + result = 0. + squares = [float((x-m)*(x-m)*y) for x,y in zip(self.categories, self.counts)] + return sum(squares)/(self.nSamples()-1) + + +class EmpiricalContinuousDistribution(EmpiricalDistribution): '''Class to represent a sample of a distribution for a continuous random variable with the number of observations for each interval intervals (categories variable) are defined by their left limits, the last one being the right limit @@ -49,9 +77,6 @@ result += self.counts[i]*(mid - m)*(mid - m) return result/(self.nSamples()-1) - def nSamples(self): - return sum(self.counts) - def referenceCounts(self, cdf): '''cdf is a cumulative distribution function returning the probability of the variable being less that x'''