changeset 8502:d437e8dc18fa

make unique work for row vectors
author Daniel J Sebald <daniel.sebald@ieee.org>
date Tue, 13 Jan 2009 09:34:43 +0100
parents f729344c7362
children 8ba2ee57c594
files scripts/ChangeLog scripts/set/unique.m
diffstat 2 files changed, 29 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog	Tue Jan 13 00:45:37 2009 -0500
+++ b/scripts/ChangeLog	Tue Jan 13 09:34:43 2009 +0100
@@ -1,3 +1,7 @@
+2009-01-13  Daniel J Sebald  <daniel.sebald@ieee.org>
+
+	* set/unique.m: Fix for vertical array inputs.
+
 2009-01-12  John W. Eaton  <jwe@octave.org>
 
 	* optimization/fzero.m, optimization/fsolve.m: Style fixes.
--- a/scripts/set/unique.m	Tue Jan 13 00:45:37 2009 -0500
+++ b/scripts/set/unique.m	Tue Jan 13 09:34:43 2009 +0100
@@ -74,8 +74,10 @@
 
   if (optrows)
     n = size (x, 1);
+    dim = 1;
   else
     n = numel (x);
+    dim = (size (x, 1) == 1) + 1;
   endif
 
   y = x;
@@ -108,7 +110,11 @@
 
   if (nargout >= 3)
     j = i;
-    j(i) = cumsum ([1, !match]);
+    if (dim == 1)
+      j(i) = cumsum ([1; !match]);
+    else
+      j(i) = cumsum ([1, !match]);
+    end
   endif
 
   if (optfirst)
@@ -128,7 +134,7 @@
 %!assert(unique([1;2]),[1;2])
 %!assert(unique([1,NaN,Inf,NaN,Inf]),[1,Inf,NaN,NaN])
 %!assert(unique({'Foo','Bar','Foo'}),{'Bar','Foo'})
-%!assert(unique({'Foo','Bar','FooBar'}),{'Bar','Foo','FooBar'})
+%!assert(unique({'Foo','Bar','FooBar'}'),{'Bar','Foo','FooBar'}')
 
 %!test
 %! [a,i,j] = unique([1,1,2,3,3,3,4]);
@@ -137,7 +143,20 @@
 %! assert(j,[1,1,2,3,3,3,4])
 %!
 %!test
-%! [a,i,j] = unique([1,1,2,3,3,3,4],'first');
-%! assert(a,[1,2,3,4])
-%! assert(i,[1,3,4,7])
-%! assert(j,[1,1,2,3,3,3,4])
+%! [a,i,j] = unique([1,1,2,3,3,3,4]','first');
+%! assert(a,[1,2,3,4]')
+%! assert(i,[1,3,4,7]')
+%! assert(j,[1,1,2,3,3,3,4]')
+%!
+%!test
+%! [a,i,j] = unique({'z'; 'z'; 'z'});
+%! assert(a,{'z'})
+%! assert(i,[3]')
+%! assert(j,[1,1,1]')
+%!
+%!test
+%! A=[1,2,3;1,2,3];
+%! [a,i,j] = unique(A,'rows');
+%! assert(a,[1,2,3])
+%! assert(A(i,:),a)
+%! assert(a(j,:),A)