Mercurial Hosting > traffic-intelligence
changeset 1031:045cb04ad7b8
corrected bug in distribution
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 19 Jun 2018 17:07:35 -0400 |
parents | aafbc0bab925 |
children | d0e339359d8a |
files | trafficintelligence/utils.py |
diffstat | 1 files changed, 6 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/trafficintelligence/utils.py Tue Jun 19 10:04:52 2018 -0400 +++ b/trafficintelligence/utils.py Tue Jun 19 17:07:35 2018 -0400 @@ -10,7 +10,7 @@ from scipy.stats import rv_continuous, kruskal, shapiro, lognorm, norm, t from scipy.spatial import distance from scipy.sparse import dok_matrix -from numpy import zeros, array, exp, sum as npsum, int as npint, arange, cumsum, mean, median, percentile, isnan, ones, convolve, dtype, isnan, NaN, ma, isinf, savez, load as npload, log, polyfit +from numpy import zeros, array, exp, sum as npsum, int as npint, arange, cumsum, mean, median, percentile, isnan, ones, convolve, dtype, isnan, NaN, ma, isinf, savez, load as npload, log, polyfit, float as npfloat from numpy.random import permutation as nppermutation from pandas import DataFrame, concat import matplotlib.pyplot as plt @@ -135,11 +135,12 @@ '''Returns the Chi2 statistics''' return sum([((e-o)*(e-o))/float(e) for e, o in zip(expected, observed)]) -class generateDistribution(rv_continuous): - def __init__(self, values, probabilities): +class EmpiricalContinuousDistribution(rv_continuous): + def __init__(self, values, probabilities, **kwargs): '''The values (and corresponding probabilities) are supposed to be sorted by value for v, p in zip(values, probabilities): P(X<=v)=p''' assert probabilities[0]==0 + super(EmpiricalContinuousDistribution, self).__init__(**kwargs) self.values = values self.probabilities = probabilities @@ -153,7 +154,7 @@ if i == len(self.values)-1: return self.probabilities[-1] else: - return (self.probabilities[i+1]-self.probabilities[i])/(self.values[i+1]-self.values[i]) + return self.probabilities[i]+(x-self.values[i])*float(self.probabilities[i+1]-self.probabilities[i])/float(self.values[i+1]-self.values[i]) class DistributionSample(object): def nSamples(self): @@ -164,7 +165,7 @@ xaxis = sorted(sample) counts = arange(1,len(sample)+1) # dtype = float if normalized: - counts /= float(len(sample)) + counts = counts.astype(float)/float(len(sample)) return xaxis, counts class DiscreteDistributionSample(DistributionSample):