comparison scripts/statistics/base/var.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
comparison
equal deleted inserted replaced
21308:c53bfd6d8e08 21309:7fbecef105ca
73 error ("var: X must be a numeric vector or matrix"); 73 error ("var: X must be a numeric vector or matrix");
74 endif 74 endif
75 75
76 if (isempty (opt)) 76 if (isempty (opt))
77 opt = 0; 77 opt = 0;
78 endif 78 elseif (opt != 0 && opt != 1)
79 if (opt != 0 && opt != 1)
80 error ("var: normalization OPT must be 0 or 1"); 79 error ("var: normalization OPT must be 0 or 1");
81 endif 80 endif
82 81
83 nd = ndims (x); 82 nd = ndims (x);
84 sz = size (x); 83 sz = size (x);
85 if (nargin < 3) 84 if (nargin < 3)
86 ## Find the first non-singleton dimension. 85 ## Find the first non-singleton dimension.
87 (dim = find (sz > 1, 1)) || (dim = 1); 86 (dim = find (sz > 1, 1)) || (dim = 1);
88 else 87 else
89 if (!(isscalar (dim) && dim == fix (dim)) 88 if (! (isscalar (dim) && dim == fix (dim) && dim > 0))
90 || !(1 <= dim && dim <= nd))
91 error ("var: DIM must be an integer and a valid dimension"); 89 error ("var: DIM must be an integer and a valid dimension");
92 endif 90 endif
93 endif 91 endif
94 92
95 n = sz(dim); 93 n = size (x, dim);
96 if (n == 1) 94 if (n == 1)
97 if (isa (x, "single")) 95 if (isa (x, "single"))
98 retval = zeros (sz, "single"); 96 retval = zeros (sz, "single");
99 else 97 else
100 retval = zeros (sz); 98 retval = zeros (sz);
111 %!assert (var (13), 0) 109 %!assert (var (13), 0)
112 %!assert (var (single (13)), single (0)) 110 %!assert (var (single (13)), single (0))
113 %!assert (var ([1,2,3]), 1) 111 %!assert (var ([1,2,3]), 1)
114 %!assert (var ([1,2,3], 1), 2/3, eps) 112 %!assert (var ([1,2,3], 1), 2/3, eps)
115 %!assert (var ([1,2,3], [], 1), [0,0,0]) 113 %!assert (var ([1,2,3], [], 1), [0,0,0])
114 %!assert (var ([1,2,3], [], 3), [0,0,0])
116 115
117 ## Test input validation 116 ## Test input validation
118 %!error var () 117 %!error var ()
119 %!error var (1,2,3,4) 118 %!error var (1,2,3,4)
120 %!error var (['A'; 'B']) 119 %!error <X must be a numeric> var (['A'; 'B'])
121 %!error var (1, -1) 120 %!error <OPT must be 0 or 1> var (1, -1)
122 %!error var ([], 1) 121 %!error <FLAG must be 0 or 1> skewness (1, 2)
122 %!error <FLAG must be 0 or 1> skewness (1, [1 0])
123 %!error <DIM must be an integer> var (1, [], ones (2,2))
124 %!error <DIM must be an integer> var (1, [], 1.5)
125 %!error <DIM must be .* a valid dimension> var (1, [], 0)
126 %!error <X must not be empty> var ([], 1)
123 127