Returns a vector containing the unique elements of an array. The first form is simply
y = unique(x)
where x
is either a numerical array or a cell-array of strings. The
result is sorted in increasing order. You can also retrieve two sets
of index vectors
[y, m, n] = unique(x)
such that y = x(m)
and x = y(n)
. If the argument x
is a matrix,
you can also indicate that FreeMat should look for unique rows in the
matrix via
y = unique(x,'rows')
and
[y, m, n] = unique(x,'rows')
Here is an example in row mode
--> A = randi(1,3*ones(15,3)) A = <int32> - size: [15 3] Columns 1 to 3 2 3 2 2 1 1 2 2 3 2 1 3 2 2 3 2 1 2 1 2 2 1 1 1 3 1 3 2 2 2 1 3 3 1 2 3 3 1 1 3 3 1 2 3 3 --> unique(A,'rows') ans = <int32> - size: [14 3] Columns 1 to 3 1 1 1 1 2 2 1 2 3 1 3 3 2 1 1 2 1 2 2 1 3 2 2 2 2 2 3 2 3 2 2 3 3 3 1 1 3 1 3 3 3 1 --> [b,m,n] = unique(A,'rows'); --> b ans = <int32> - size: [14 3] Columns 1 to 3 1 1 1 1 2 2 1 2 3 1 3 3 2 1 1 2 1 2 2 1 3 2 2 2 2 2 3 2 3 2 2 3 3 3 1 1 3 1 3 3 3 1 --> A(m,:) ans = <int32> - size: [14 3] Columns 1 to 3 1 1 1 1 2 2 1 2 3 1 3 3 2 1 1 2 1 2 2 1 3 2 2 2 2 2 3 2 3 2 2 3 3 3 1 1 3 1 3 3 3 1 --> b(n,:) ans = <int32> - size: [15 3] Columns 1 to 3 2 3 2 2 1 1 2 2 3 2 1 3 2 2 3 2 1 2 1 2 2 1 1 1 3 1 3 2 2 2 1 3 3 1 2 3 3 1 1 3 3 1 2 3 3
Here is an example in vector mode
--> A = randi(1,5*ones(10,1)) A = <int32> - size: [10 1] Columns 1 to 1 4 3 5 3 2 5 5 2 3 4 --> unique(A) ans = <int32> - size: [4 1] Columns 1 to 1 2 3 4 5 --> [b,m,n] = unique(A,'rows'); --> b ans = <int32> - size: [4 1] Columns 1 to 1 2 3 4 5 --> A(m) ans = <int32> - size: [4 1] Columns 1 to 1 2 3 4 5 --> b(n) ans = <int32> - size: [10 1] Columns 1 to 1 4 3 5 3 2 5 5 2 3 4
For cell arrays of strings.
--> A = {'hi','bye','good','tell','hi','bye'} A = <cell array> - size: [1 6] Columns 1 to 6 hi bye good tell hi bye --> unique(A) ans = <cell array> - size: [4 1] Columns 1 to 1 bye good hi tell