diff scripts/statistics/base/mean.m @ 21309:7fbecef105ca

Allow statistics functions to work over non-existent dimension (bug #33523). * var.m, center.m, kurtosis.m, mean.m, meansq.m, median.m, moment.m, skewness.m, std.m: Remove check for input dimension being within the range of ndims (x). Add BIST tests for new behavior and update input validation tests.
author Rik <rik@octave.org>
date Fri, 19 Feb 2016 21:27:03 -0800
parents 516bb87ea72e
children bac0d6f07a3e
line wrap: on
line diff
--- a/scripts/statistics/base/mean.m	Fri Feb 19 09:40:59 2016 -0800
+++ b/scripts/statistics/base/mean.m	Fri Feb 19 21:27:03 2016 -0800
@@ -105,13 +105,12 @@
     ## Find the first non-singleton dimension.
     (dim = find (sz > 1, 1)) || (dim = 1);
   else
-    if (!(isscalar (dim) && dim == fix (dim))
-      || !(1 <= dim && dim <= nd))
+    if (! (isscalar (dim) && dim == fix (dim) && dim > 0))
       error ("mean: DIM must be an integer and a valid dimension");
     endif
   endif
 
-  n = sz(dim);
+  n = size (x, dim);
 
   if (strcmp (opt, "a"))
     y = sum (x, dim) / n;
@@ -147,15 +146,16 @@
 %!assert (mean ([4 4 2], "h"), 3)
 %!assert (mean (logical ([1 0 1 1])), 0.75)
 %!assert (mean (single ([1 0 1 1])), single (0.75))
+%!assert (mean ([1 2], 3), [1 2])
 
 ## Test input validation
 %!error mean ()
 %!error mean (1, 2, 3, 4)
-%!error mean ({1:5})
-%!error mean (1, 2, 3)
-%!error mean (1, ones (2,2))
-%!error mean (1, 1.5)
-%!error mean (1, 0)
-%!error mean (1, 3)
-%!error mean (1, "b")
+%!error <X must be a numeric> mean ({1:5})
+%!error <OPT must be a string> mean (1, 2, 3)
+%!error <DIM must be an integer> mean (1, ones (2,2))
+%!error <DIM must be an integer> mean (1, 1.5)
+%!error <DIM must be .* a valid dimension> mean (1, 0)
+%!error <X must not contain any negative values> mean ([1 -1], "g")
+%!error <option 'b' not recognized> mean (1, "b")