unique

Unique values in array

Syntax

• `C = unique(A)` example
• `C = unique(A,'rows')` example
• ```[C,ia,ic] = unique(A)```
• ```[C,ia,ic] = unique(A,'rows')```
• ```[C,ia,ic] = unique(A,setOrder)``` example
• ```[C,ia,ic] = unique(A,'rows',setOrder)``` example
• ```[C,ia,ic] = unique(A,'legacy')``` example
• ```[C,ia,ic] = unique(A,'rows','legacy')``` example
• ```[C,ia,ic] = unique(A,occurrence,'legacy')``` example
• ```[C,ia,ic] = unique(A,'rows',occurrence,'legacy')``` example

Description

example

````C = unique(A)` returns the same data as in `A`, but with no repetitions.If `A` is a numeric array, logical array, character array, categorical array, datetime array, duration array, or a cell array of strings, then `unique` returns the unique values in `A`. The values of `C` are in sorted order.If `A` is a table, then `unique` returns the unique rows in `A`. The rows of table `C` are in sorted order.```

example

````C = unique(A,'rows')` treats each row of `A` as a single entity and returns the unique rows of `A`. The rows of the array `C` are in sorted order.The `'rows'` option does not support cell arrays.```
``````[C,ia,ic] = unique(A)``` also returns index vectors `ia` and `ic`.If `A` is a vector, then ```C = A(ia)``` and `A = C(ic)`.If `A` is a matrix or array, then ```C = A(ia)``` and `A(:) = C(ic)`.If `A` is a table, then ```C = A(ia,:)``` and `A = C(ic,:)`.```
``````[C,ia,ic] = unique(A,'rows')``` also returns index vectors `ia` and `ic`, such that `C = A(ia,:)` and `A = C(ic,:)`.```

example

``````[C,ia,ic] = unique(A,setOrder)``` and ```[C,ia,ic] = unique(A,'rows',setOrder)``` return `C` in a specific order. `setOrder='sorted'` returns the values (or rows) of `C` in sorted order. `setOrder='stable'` returns the values (or rows) of `C` in the same order as `A`. If no value is specified, the default is `'sorted'`.```

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 the `unique` function from R2012b and prior releases.The `'legacy'` option does not support categorical arrays or tables.```

Examples

collapse all

Unique Values in Vector

Define a vector with a repeated value.

`A = [9 2 9 5];`

Find the unique values of `A`.

`C = unique(A)`
```C = 2 5 9```

Unique Rows in Table

Define a table with 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 = Age 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 of `A`.

`C = unique(A)`
```C = Age Height Weight --- ------ ------ Bob 38 64 131 Fred 38 71 176 George 40 67 185 Betty 43 69 163 ```

`unique` returns the rows of `A` in sorted order by the first variable, `Age` and then by the second variable, `Height`.

Unique Values and Their Indices

Define a vector with a repeated value.

`A = [9 2 9 5];`

Find the unique values of `A` and the index vectors `ia` and `ic`, such that `C = A(ia)` and `A = C(ic)`.

`[C, ia, ic] = unique(A)`
```C = 2 5 9 ia = 2 4 1 ic = 3 1 3 2```

Unique Rows in Matrix

Define a matrix with a repeated row.

`A = [9 2 9 5; 9 2 9 0; 9 2 9 5];`

Find the unique rows of `A` and the index vectors `ia` and `ic`, such that ```C = A(ia,:)``` and `A = C(ic,:)`.

`[C, ia, ic] = unique(A,'rows')`
```C = 9 2 9 0 9 2 9 5 ia = 2 1 ic = 2 1 2```

Notice that the second row in `A` is identified as unique even though the elements `9`, `2`, and `9` are repeated in the other rows.

Unique Values in Vector with Specified Order

Use the `setOrder` argument to specify the ordering of the values in `C`.

Specify `'stable'` if you want the values in `C` to have the same order as in `A`.

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

Alternatively, you can specify `'sorted'` order.

`[C, ia, ic] = unique(A,'sorted')`
```C = 2 5 9 ia = 2 4 1 ic = 3 1 3 2```

Unique Values in Array Containing NaNs

Define a vector containing `NaN`.

`A = [5 5 NaN NaN];`

Find the unique values of `A`.

`C = unique(A)`
```C = 5 NaN NaN```

`unique` treats `NaN` values as distinct.

Unique Entries in Cell Array of Strings

Define a cell array of strings.

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

Find the unique strings contained in `A`.

`C = unique(A)`
```C = 'One' 'one' 'twenty-two' 'two'```

Cell Array of Strings with Trailing White Space

Define a cell array of strings, `A`, where some of the strings have trailing white space.

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

Find the unique strings contained in `A`.

`C = unique(A)`
```C = 'cat' 'dog' 'dog ' 'fish' 'fish ' 'horse'```

`unique` treats trailing white space in cell arrays of strings as distinct characters.

Preserve Legacy Behavior of unique

Use the `'legacy'` flag to preserve the behavior of `unique` from R2012b and prior releases in your code.

Find the unique elements of `A` with the current behavior.

```A = [9 2 9 5]; [C1, ia1, ic1] = unique(A)```
```C1 = 2 5 9 ia1 = 2 4 1 ic1 = 3 1 3 2```

Find the unique elements of `A`, and preserve the legacy behavior.

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

Input Arguments

collapse all

`A` — Input arraynumeric array | logical array | character array | categorical array | datetime arrays | duration arrays | cell array of strings | table

Input array, specified as a numeric array, logical array, character array, categorical array, datetime array, duration array, cell array of strings, or table.

If `A` is a table, `unique` does not take row names into account. Two rows that have the same values, but different names, are considered equal.

Furthermore, `A` can be an object with the following class methods:

• `sort` (or `sortrows` for 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.

`setOrder` — Order flag`'sorted'` (default) | `'stable'`

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

Order FlagMeaning
`'sorted'`The values (or rows) in `C` return in sorted order. For example: ```C = unique([5 5 3 4],'sorted')``` returns ```C = [3 4 5]```.
`'stable'`The values (or rows) in `C` return in the same order as in `A`. For example: ```C = unique([5 5 3 4],'stable')``` returns `C = [5 3 4]`.

`occurrence` — Occurrence flag for legacy behavior`'last'` (default) | `'first'`

Occurrence flag for legacy behavior, specified as `'first'` or `'last'`, indicates whether `ia` should contain the first or last indices to repeated values found in `A`.

Occurrence FlagMeaning
`'last'`If there are repeated values (or rows) in `A`, then `ia` contains the index to the last occurrence of the repeated value. For example: ```[C,ia,ic] = unique([9 9 9],'last','legacy')``` returns `ia = 3`.
`'first'`If there are repeated values (or rows) in `A`, then `ia` contains the index to the first occurrence of the repeated value. For example: ```[C,ia,ic] = unique([9 9 9],'first','legacy')``` returns `ia = 1`.

Output Arguments

collapse all

`C` — Unique data of `A`vector | matrix | table

Unique data of `A`, returned as a vector, matrix, or table. The following describes the shape of `C` when the input, `A`, is a vector or a matrix:

• If the `'rows'` flag is not specified and `A` is a row vector, then `C` is a row vector.

• If the `'rows'` flag is not specified and `A` is not a row vector, then `C` is a column vector.

• If the `'rows'` flag is specified, then `C` is a matrix containing the unique rows of `A`.

The class of `C` is the same as the class of the input `A`.

`ia` — Index to `A`column vector

Index to `A`, returned as a column vector of indices to the first occurrence of repeated elements. When the `'legacy'` flag is specified, `ia` is a row vector that contains indices to the last occurrence of repeated elements.

The indices generally satisfy `C = A(ia)`. If `A` is a table, or if the `'rows'` option is specified, then `C = A(ia,:)`.

`ic` — Index to `C`column vector

Index to `C`, returned as a column vector when the `'legacy'` flag is not specified. `ic` contains indices that satisfy the following properties.

• If `A` is a vector, then ```A = C(ic)```.

• If `A` is a matrix or array, then ```A(:) = C(ic)```.

• If `A` is a table, or if the `'rows'` option is specified, then `A = C(ic,:)`.

collapse all

Tips

• To find unique rows in table `A` with respect to a subset of variables, you can use column subscripting. For example, you can use `unique(A(:,vars))`, where `vars` is a positive integer, a vector of positive integers, a variable name, a cell array of variable names, or a logical vector.