[Scipy-svn] r3341 - in trunk/scipy/stats: . tests

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Sep 20 16:18:35 EDT 2007


Author: stefan
Date: 2007-09-20 15:18:15 -0500 (Thu, 20 Sep 2007)
New Revision: 3341

Modified:
   trunk/scipy/stats/stats.py
   trunk/scipy/stats/tests/test_stats.py
Log:
Fix stats.percentile for 2D input.


Modified: trunk/scipy/stats/stats.py
===================================================================
--- trunk/scipy/stats/stats.py	2007-09-20 19:43:27 UTC (rev 3340)
+++ trunk/scipy/stats/stats.py	2007-09-20 20:18:15 UTC (rev 3341)
@@ -966,24 +966,25 @@
     return a + (b - a)*fraction;
 
 def scoreatpercentile(a, per, limit=()):
-    """Calculates the score at the given 'per' percentile of the sequence
-    a.  For example, the score at per=50 is the median.
+    """Calculate the score at the given 'per' percentile of the
+    sequence a.  For example, the score at per=50 is the median.
 
-    If the desired quantile lies between two data points, we interpolate
-    between them.
-    
+    If the desired quantile lies between two data points, we
+    interpolate between them.
+
     If the parameter 'limit' is provided, it should be a tuple (lower,
-    upper) of two values.  Values of 'a' outside this (closed) interval
-    will be ignored.
+    upper) of two values.  Values of 'a' outside this (closed)
+    interval will be ignored.
+
     """
     # TODO: this should be a simple wrapper around a well-written quantile
     # function.  GNU R provides 9 quantile algorithms (!), with differing
     # behaviour at, for example, discontinuities.
-    values = np.sort(a)
+    values = np.sort(a,axis=0)
     if limit:
         values = values[(limit[0] < a) & (a < limit[1])]
-    
-    idx = per /100. * (len(values) - 1)
+
+    idx = per /100. * (values.shape[0] - 1)
     if (idx % 1 == 0):
         return values[idx]
     else:

Modified: trunk/scipy/stats/tests/test_stats.py
===================================================================
--- trunk/scipy/stats/tests/test_stats.py	2007-09-20 19:43:27 UTC (rev 3340)
+++ trunk/scipy/stats/tests/test_stats.py	2007-09-20 20:18:15 UTC (rev 3341)
@@ -624,18 +624,28 @@
         self.a1 = [3,4,5,10,-3,-5,6]
         self.a2 = [3,-6,-2,8,7,4,2,1]
         self.a3 = [3.,4,5,10,-3,-5,-6,7.0]
-        
+
     def check_median(self):
         assert_equal(stats.median(self.a1), 4)
         assert_equal(stats.median(self.a2), 2.5)
         assert_equal(stats.median(self.a3), 3.5)
-    
+
     def check_percentile(self):
         x = arange(8) * 0.5
         assert_equal(stats.scoreatpercentile(x, 0), 0.)
         assert_equal(stats.scoreatpercentile(x, 100), 3.5)
         assert_equal(stats.scoreatpercentile(x, 50), 1.75)
-        
+
+    def test_2D(self):
+        x = array([[1, 1, 1],
+                   [1, 1, 1],
+                   [4, 4, 3],
+                   [1, 1, 1],
+                   [1, 1, 1]])
+        assert_array_equal(stats.scoreatpercentile(x,50),
+                           [1,1,1])
+
+
 class test_std(NumpyTestCase):
     def check_basic(self):
         a = [3,4,5,10,-3,-5,6]




More information about the Scipy-svn mailing list