Skip to content
Snippets Groups Projects
Commit db405dee authored by Tobias Schmidt's avatar Tobias Schmidt
Browse files

fixed median calculation for very small data sets

parent 029d1fe7
No related branches found
No related tags found
No related merge requests found
...@@ -56,9 +56,9 @@ def Median(xs): ...@@ -56,9 +56,9 @@ def Median(xs):
raise RuntimeError("Can't calculate median of empty sequence") raise RuntimeError("Can't calculate median of empty sequence")
sorted_xs=sorted(xs) sorted_xs=sorted(xs)
if (len(xs) % 2)==0: if (len(xs) % 2)==0:
return (sorted_xs[len(xs)/2]+sorted_xs[len(xs)/2+1])/2 return (sorted_xs[(len(xs)-1)/2]+sorted_xs[(len(xs)-1)/2+1])/2.0
else: else:
return sorted_xs[len(xs)/2] return sorted_xs[(len(xs)-1)/2]
@FloatValueExtract @FloatValueExtract
def StdDev(xs): def StdDev(xs):
......
...@@ -7,11 +7,15 @@ class TestStUtils(unittest.TestCase): ...@@ -7,11 +7,15 @@ class TestStUtils(unittest.TestCase):
self.data1 = [0,1,2,3,4,5,6,-5,-4,-3,-2,-1,1] self.data1 = [0,1,2,3,4,5,6,-5,-4,-3,-2,-1,1]
self.data2 = [1,2,3,4,5,6,7,8,9,10,11,12,13] self.data2 = [1,2,3,4,5,6,7,8,9,10,11,12,13]
self.data3 = [0.1,0.5,0.7,2.4,0.5,4.1,0.9,-1.1,-0.5,0.7,-1.4,-7.5,8.5] self.data3 = [0.1,0.5,0.7,2.4,0.5,4.1,0.9,-1.1,-0.5,0.7,-1.4,-7.5,8.5]
self.data_short = [0,1]
self.data_short2 = [0,1,2]
self.mean = 0.5384615385 self.mean = 0.5384615385
self.mean2 = 0.6076923077 self.mean2 = 0.6076923077
self.median = 1 self.median = 1
self.median2 = 0.5 self.median2 = 0.5
self.median_short = 0.5
self.median_short2 = 1.0
self.stddev = 3.3192998478 self.stddev = 3.3192998478
self.stddev2 = 3.4192805223 self.stddev2 = 3.4192805223
self.minimum = -5 self.minimum = -5
...@@ -42,6 +46,12 @@ class TestStUtils(unittest.TestCase): ...@@ -42,6 +46,12 @@ class TestStUtils(unittest.TestCase):
assert self.isSimilar(stutil.Median(self.data3), self.median2, 0.001), \ assert self.isSimilar(stutil.Median(self.data3), self.median2, 0.001), \
"Median (%f) does not correspond to precalculated median (%f)" % \ "Median (%f) does not correspond to precalculated median (%f)" % \
(stutil.Median(self.data3), self.median2) (stutil.Median(self.data3), self.median2)
assert self.isSimilar(stutil.Median(self.data_short), self.median_short, 0.001), \
"Median (%f) does not correspond to precalculated median (%f)" % \
(stutil.Median(self.data_short), self.median_short)
assert self.isSimilar(stutil.Median(self.data_short2), self.median_short2, 0.001), \
"Median (%f) does not correspond to precalculated median (%f)" % \
(stutil.Median(self.data_short2), self.median_short2)
def testStddev(self): def testStddev(self):
assert self.isSimilar(stutil.StdDev(self.data1), self.stddev, 0.001), \ assert self.isSimilar(stutil.StdDev(self.data1), self.stddev, 0.001), \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment