Next: Polynomial Manipulations, Previous: Statistics, 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"`.

  See also: union, intersect, setdiff, setxor, ismember.

Next: Polynomial Manipulations, Previous: Statistics, Up: Top [Contents][Index]