Documentation

unique

Unique values in array

Description

example

C= unique(A)returns the same data as inA, but with no repetitions.Cis in sorted order.

  • IfAis a table or timetable, thenuniquereturns the unique rows inAin sorted order. For timetables,uniquetakes row times and row values into account when determining whether rows are unique, and sorts the output timetableCby row times.

example

C= unique(A,setOrder)returns the unique values ofAin a specific order.setOrdercan be'sorted'(default) or'stable'.

C= unique(A,occurrence)specifies which indices to return in case of repeated values.occurrencecan be'first'(default) or'last'.

example

C= unique(A,___,'rows')andC= unique(A,'rows',___)treat each row ofAas a single entity and return the unique rows ofAin sorted order. You must specifyAand optionally can specifysetOrderoroccurrence.

The'rows'option does not support cell arrays.

[C,ia,ic] = unique(___)also returns index vectorsiaandicusing any of the previous syntaxes.

  • IfAis a vector, thenC = A(ia)andA = C(ic).

  • IfAis a matrix or array, thenC = A(ia)andA(:) = C(ic).

  • If the'rows'option is specified, thenC = A(ia,:)andA = C(ic,:).

  • IfAis a table or a timetable, thenC = A(ia,:)andA = C(ic,:).

example

[C,ia,ic] = unique(A,'legacy'),[C,ia,ic] = unique(A,'rows','legacy'),[C,ia,ic] = unique(A,occurrence,'legacy'),and[C,ia,ic] = unique(A,'rows',occurrence,'legacy')preserve the behavior of theuniquefunction from R2012b and prior releases.

The'legacy'选项不支持分类数组dateti金宝appme arrays, duration arrays, calendarDuration arrays, tables, or timetables.

Examples

collapse all

Define a vector with a repeated value.

A = [9 2 9 5];

Find the unique values ofA.

C = unique(A)
C =1×32 5 9

Create a table with some repeated data.

Name = {'Fred';'Betty';'Bob';'George';'Jane'}; Age = [38;43;38;40;38]; Height = [71;69;64;67;64]; Weight = [176;163;131;185;131]; A = table(Age,Height,Weight,'RowNames',Name)
A=5×3 tableAge Height Weight ___ ______ ______ Fred 38 71 176 Betty 43 69 163 Bob 38 64 131 George 40 67 185 Jane 38 64 131

Find the unique rows ofA.uniquereturns the rows ofAin sorted order by the first variableAgeand then by the second variableHeight.

C = unique(A)
C=4×3 tableAge Height Weight ___ ______ ______ Bob 38 64 131 Fred 38 71 176 George 40 67 185 Betty 43 69 163

Find the table rows with unique values in the first variableAge. If you only want one table variable to contain unique values, you can use the indices returned byuniqueto extract those rows from the table.

[C,ia] = unique(A.Age); B = A(ia,:)
B=3×3 tableAge Height Weight ___ ______ ______ Fred 38 71 176 George 40 67 185 Betty 43 69 163

Define a vector with a repeated value.

A = [9 2 9 5];

Find the unique values ofAand the index vectorsiaandic, such thatC = A(ia)andA = C(ic).

[C, ia, ic] = unique(A)
C =1×32 5 9
ia =3×12 4 1
ic =4×13 1 3 2

Create a 10-by-3 matrix with some repeated rows.

A = randi(3,10,3)
A =10×33 1 2 3 3 1 1 3 3 3 2 3 2 3 3 1 1 3 1 2 3 2 3 2 3 3 2 3 3 1

Find the unique rows ofAbased on the data in the first two columns. Specify three outputs to return the index vectorsiaandic.

[C,ia,ic] = unique(A(:,1:2),'rows')
C =7×21 1 1 2 1 3 2 3 3 1 3 2 3 3
ia =7×16 7 3 5 1 4 2
ic =10×15 7 3 6 4 1 2 4 7 7

Useiato index intoAand retrieve the rows that have unique combinations of elements in the first two columns.

uA = A(ia,:)
uA =7×31 1 3 1 2 3 1 3 3 2 3 3 3 1 2 3 2 3 3 3 1

Find the unique elements in a vector and then useaccumarrayto count the number of times each unique element appears.

Create a vector of random integers from 1 through 5.

a = randi([1 5],200,1);

Find the unique elements in the vector. Return the index vectorsiaandic.

[C,ia,ic] = unique(a);

Count the number of times each element inCappears ina. Specifyicas the first input toaccumarrayand1as the second input so that the function counts repeated subscripts inic. Summarize the results.

a_counts = accumarray(ic,1); value_counts = [C, a_counts]
value_counts =5×21 46 2 36 3 38 4 39 5 41

Use thesetOrderargument to specify the ordering of the values inC.

Specify'stable'if you want the values inCto have the same order as inA.

A = [9 2 9 5]; [C, ia, ic] = unique(A,'stable')
C =1×39 2 5
ia =3×11 2 4
ic =4×11 2 1 3

Alternatively, you can specify'sorted'order.

[C, ia, ic] = unique(A,'sorted')
C =1×32 5 9
ia =3×12 4 1
ic =4×13 1 3 2

Define a vector containingNaN.

A = [5 5 NaN NaN];

Find the unique values ofA.

C = unique(A)
C =1×35 NaN NaN

uniquetreatsNaNvalues as distinct.

Create a vectorx. Obtain a second vectoryby transforming and untransformingx. This transformation introduces round-off differences iny.

x = (1:6)'*pi; y = 10.^log10(x);

Verify thatxandyare not identical by taking the difference.

x-y
ans =6×110-14× 0.0444 0 0 0 0 -0.3553

Useuniqueto find the unique elements in the concatenated vector[x;y]. Theuniquefunction performs exact comparisons and determines that some values inxare not exactly equal to values iny. These are the same elements that have a nonzero difference inx-y. Thus,ccontains values thatappearto be duplicates.

c = unique([x;y])
c =8×13.1416 3.1416 6.2832 9.4248 12.5664 15.7080 18.8496 18.8496

Useuniquetolto perform the comparison using a small tolerance.uniquetoltreats elements that are within tolerance as equal.

C = uniquetol([x;y])
C =6×13.1416 6.2832 9.4248 12.5664 15.7080 18.8496

Create a cell array of character vectors.

A = {'one','two','twenty-two','One','two'};

Find the unique character vectors contained inA.

C = unique(A)
C =1x4 cell array{'One'} {'one'} {'twenty-two'} {'two'}

Create a cell array of character vectors,A, where some of the vectors have trailing white space.

A = {'dog','cat','fish','horse','dog ','fish '};

Find the unique character vectors contained inA.

C = unique(A)
C =1x6 cell array{'cat'} {'dog'} {'dog '} {'fish'} {'fish '} {'horse'}

uniquetreats trailing white space in cell arrays of character vectors as distinct characters.

Use the'legacy'flag to preserve the behavior ofuniquefrom R2012b and prior releases in your code.

Find the unique elements ofAwith the current behavior.

A = [9 2 9 5]; [C1, ia1, ic1] = unique(A)
C1 =1×32 5 9
ia1 =3×12 4 1
ic1 =4×13 1 3 2

Find the unique elements ofA, and preserve the legacy behavior.

[C2, ia2, ic2] = unique(A,'legacy')
C2 =1×32 5 9
ia2 =1×32 4 3
ic2 =1×43 1 3 2

Input Arguments

collapse all

Input array.

  • IfAis a table, thenuniquedoesnottake row names into account. Two rows that have the same values, but different names, are considered equal.

  • IfAis a timetable, thenuniquetakes row times into account. Two rows that have the same values, but different times, are not considered equal.

Acan also be an object with the following class methods:

  • sort(orsortrowsfor the'rows'option)

  • ne

The object class methods must be consistent with each other. These objects include heterogeneous arrays derived from the same root class. For example,Acan be an array of handles to graphics objects.

Order flag, specified as'sorted'or'stable', indicates the order of the values (or rows) inC.

Flag Description

'sorted'

The values (or rows) inCreturn in sorted order as returned bysort.

Example

C = unique([5 5 3 4],'sorted')
C = 3 4 5

'stable'

The values (or rows) inCreturn in the same order as inA.

Example

C = unique([5 5 3 4],'stable')
C = 5 3 4

Data Types:char|string

Occurrence flag, specified as'first'or'last', indicates whetheriashould contain the first or last indices to repeated values found inA.

Occurrence Flag Meaning
'last' If there are repeated values (or rows) inA, theniacontains the index to the last occurrence of the repeated value. For example:[C,ia,ic] = unique([9 9 9],'last','legacy')returnsia = 3. This is the default behavior when the'legacy'flag is specified.
'first' If there are repeated values (or rows) inA, theniacontains the index to the first occurrence of the repeated value. For example:[C,ia,ic] = unique([9 9 9],'first')returnsia = 1. This is the default behavior.

Data Types:char|string

Output Arguments

collapse all

Unique data ofA, returned as an array. The class ofCis the same as the class of the inputA. The shape ofCdepends on whether the input is a vector or a matrix:

  • If the'rows'flag is not specified andAis a row vector, thenCis a row vector.

  • If the'rows'flag is not specified andAis not a row vector, thenCis a column vector.

  • If the'rows'指定标记,thenCis a matrix containing the unique rows ofA.

Index toA, returned as a column vector of indices to thefirstoccurrence of repeated elements. When the'legacy'指定标记,iais a row vector that contains indices to thelastoccurrence of repeated elements.

The indices generally satisfyC = A(ia). IfAis a table, or if the'rows'option is specified, thenC = A(ia,:).

Index toC, returned as a column vector when the'legacy'flag is not specified.iccontains indices that satisfy the following properties.

  • IfAis a vector, thenA = C(ic).

  • IfAis a matrix or array, thenA(:) = C(ic).

  • IfAis a table, or if the'rows'option is specified, thenA = C(ic,:).

Tips

  • Useuniquetolto find unique floating-point numbers using a tolerance.

  • To find unique rows in tables or timetables with respect to a subset of variables, you can use column subscripting. For example, you can useunique(A(:,vars)), wherevarsis a positive integer, a vector of positive integers, a variable name, a cell array of variable names, or a logical vector. Alternatively, you can usevartypeto create a subscript that selects variables of a specified type.

Extended Capabilities

Introduced before R2006a