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