Mercurial > hg > octave-nkf
diff scripts/statistics/base/center.m @ 8977:f464119ec165
further simplify some stats funcs
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Fri, 13 Mar 2009 21:26:13 +0100 |
parents | eb63fbe60fab |
children | fb3543975ed9 |
line wrap: on
line diff
--- a/scripts/statistics/base/center.m +++ b/scripts/statistics/base/center.m @@ -29,30 +29,34 @@ ## Author: KH <Kurt.Hornik@wu-wien.ac.at> ## Description: Center by subtracting means -function retval = center (x, varargin) +function retval = center (x, dim) if (nargin != 1 && nargin != 2) print_usage (); endif - if (isvector (x)) - retval = x - mean (x, varargin{:}); - elseif (ismatrix (x)) - if nargin < 2 - dim = find (size (x) > 1, 1); - if (isempty (dim)) - dim = 1; - endif; + if (nargin < 2) + t = find (size (x) != 1); + if (isempty (t)) + dim = 1; else - dim = varargin{1}; + dim = t(1); endif - sz = ones (1, ndims (x)); - sz (dim) = size (x, dim); - retval = x - repmat (mean (x, dim), sz); - elseif (isempty (x)) + endif + n = size (x, dim); + + if (n == 1) + retval = zeros (size (x)); + elseif (n > 0) + if (isvector (x)) + retval = x - sum (x) / n; + else + mx = sum (x, dim) / n; + idx(1:ndims (x)) = {':'}; + idx{dim} = ones (1, n); + retval = x - mx(idx{:}); + endif + else retval = x; - else - error ("center: x must be a vector or a matrix"); endif - endfunction