Next: , Previous: , Up: Top   [Contents][Index]

## 27 Sets

Octave has a number of functions for managing sets of data. A set is defined as a collection of unique elements and is typically represented by a vector of numbers sorted in ascending order. Any vector or matrix can be converted to a set by removing duplicates through the use of the `unique` function. However, it isn’t necessary to explicitly create a set as all of the functions which operate on sets will convert their input to a set before proceeding.

: unique (x)
: unique (x, "rows")
: unique (…, "sorted")
: unique (…, "stable")
: [y, i, j] = unique (…)
: [y, i, j] = unique (…, "first")
: [y, i, j] = unique (…, "last")
: [y, i, j] = unique (…, "legacy")

Return the unique elements of x.

If the input x is a column vector then return a column vector; Otherwise, return a row vector. x may also be a cell array of strings.

If the optional argument `"rows"` is given then return the unique rows of x. The input must be a 2-D numeric matrix to use this option.

The optional argument `"sorted"`/`"stable"` controls the order in which unique values appear in the output. The default is `"sorted"` and values in the output are placed in ascending order. The alternative `"stable"` preserves the order found in the input x.

If requested, return column index vectors i and j such that `y = x(i)` and `x = y(j)`.

Additionally, if i is a requested output then one of the flags `"first"` or `"last"` may be given. If `"last"` is specified, return the highest possible indices in i, otherwise, if `"first"` is specified, return the lowest. The default is `"first"`.

Example 1 : sort order

```unique ([3, 1, 1, 2])
⇒ [1, 2, 3]
unique ([3, 1, 1, 2], "stable")
⇒ [3, 1, 2]
```

Example 2 : index selection

```[~, i] = unique ([3, 1, 1, 2], "first")
⇒ i = [2; 4; 1]
[~, i] = unique ([3, 1, 1, 2], "last")
⇒ i = [3; 4; 1]
```

Programming Notes: The input flag `"legacy"` changes the algorithm to be compatible with MATLAB releases prior to R2012b. Specifically, The index ordering flag is changed to `"last"`, and the shape of the outputs i, j will follow the shape of the input x rather than always being column vectors.

The third output, j, has not been implemented yet when the sort order is `"stable"`.