# HG changeset patch # User jwe # Date 1109561016 0 # Node ID 912058eb83607118dfd5520d3d0c793669cb0a06 # Parent c0d14c93fdf18db55d9550b7e174893c88847b21 [project @ 2005-02-28 03:23:36 by jwe] diff -r c0d14c93fdf1 -r 912058eb8360 scripts/set/unique.m --- a/scripts/set/unique.m Sun Feb 27 23:43:30 2005 +0000 +++ b/scripts/set/unique.m Mon Feb 28 03:23:36 2005 +0000 @@ -35,49 +35,55 @@ function [y, i, j] = unique (x, r) - if ( nargin < 1 || nargin > 2 || (nargin == 2 && !strcmp(r,"rows")) ) + if (nargin < 1 || nargin > 2 || (nargin == 2 && ! strcmp (r, "rows"))) usage ("unique (x) or unique (x, 'rows')"); endif if (nargin == 1) - n = prod(size(x)); + n = prod (size (x)); else - n = size(x,1); + n = size (x, 1); endif - y = x; + y = x; if (n < 1) i = j = []; - return + return; elseif (n < 2) i = j = 1; - return + return; endif - if isstr(x), y = toascii(y); endif + if (isstr (x)) + y = toascii (y); + endif - if nargin == 2 - [y, i] = sortrows(y); - match = all( [ y(1:n-1,:) == y(2:n,:) ]' ); + if (nargin == 2) + [y, i] = sortrows (y); + match = all ((y(1:n-1,:) == y(2:n,:))'); idx = find (match); - y (idx, :) = []; + y(idx,:) = []; else - if (size(y,1) != 1) y = y(:); endif - [y, i] = sort(y); - match = [ y(1:n-1) == y(2:n) ]; + if (size (y, 1) != 1) + y = y(:); + endif + [y, i] = sort (y); + match = y(1:n-1) == y(2:n); idx = find (match); - y (idx) = []; + y(idx) = []; endif ## I don't know why anyone would need reverse indices, but it ## was an interesting challenge. I welcome cleaner solutions. if (nargout >= 3) j = i; - j (i) = cumsum ( prepad ( ~match, n, 1 ) ); + j(i) = cumsum (prepad (! match, n, 1)); endif - i (idx) = []; + i(idx) = []; - if isstr(x), y = setstr(y); endif + if (isstr (x)) + y = setstr (y); + endif endfunction