1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
|
<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Sets (GNU Octave (version 10.3.0))</title>
<meta name="description" content="Sets (GNU Octave (version 10.3.0))">
<meta name="keywords" content="Sets (GNU Octave (version 10.3.0))">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="index.html" rel="up" title="Top">
<link href="Polynomial-Manipulations.html" rel="next" title="Polynomial Manipulations">
<link href="Statistics.html" rel="prev" title="Statistics">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
div.example {margin-left: 3.2em}
span:hover a.copiable-link {visibility: visible}
strong.def-name {font-family: monospace; font-weight: bold; font-size: larger}
-->
</style>
<link rel="stylesheet" type="text/css" href="octave.css">
</head>
<body lang="en">
<div class="chapter-level-extent" id="Sets">
<div class="nav-panel">
<p>
Next: <a href="Polynomial-Manipulations.html" accesskey="n" rel="next">Polynomial Manipulations</a>, Previous: <a href="Statistics.html" accesskey="p" rel="prev">Statistics</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h2 class="chapter" id="Sets-1"><span>27 Sets<a class="copiable-link" href="#Sets-1"> ¶</a></span></h2>
<p>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 <code class="code">unique</code> 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.
</p>
<a class="anchor" id="XREFunique"></a><span style="display:block; margin-top:-4.5ex;"> </span>
<dl class="first-deftypefn">
<dt class="deftypefn" id="index-unique"><span><code class="def-type"><var class="var">y</var> =</code> <strong class="def-name">unique</strong> <code class="def-code-arguments">(<var class="var">x</var>)</code><a class="copiable-link" href="#index-unique"> ¶</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-unique-1"><span><code class="def-type"><var class="var">y</var> =</code> <strong class="def-name">unique</strong> <code class="def-code-arguments">(<var class="var">x</var>, "rows")</code><a class="copiable-link" href="#index-unique-1"> ¶</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-unique-2"><span><code class="def-type"><var class="var">y</var> =</code> <strong class="def-name">unique</strong> <code class="def-code-arguments">(…, "sorted")</code><a class="copiable-link" href="#index-unique-2"> ¶</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-unique-3"><span><code class="def-type"><var class="var">y</var> =</code> <strong class="def-name">unique</strong> <code class="def-code-arguments">(…, "stable")</code><a class="copiable-link" href="#index-unique-3"> ¶</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-unique-4"><span><code class="def-type">[<var class="var">y</var>, <var class="var">i</var>, <var class="var">j</var>] =</code> <strong class="def-name">unique</strong> <code class="def-code-arguments">(…)</code><a class="copiable-link" href="#index-unique-4"> ¶</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-unique-5"><span><code class="def-type">[<var class="var">y</var>, <var class="var">i</var>, <var class="var">j</var>] =</code> <strong class="def-name">unique</strong> <code class="def-code-arguments">(…, "first")</code><a class="copiable-link" href="#index-unique-5"> ¶</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-unique-6"><span><code class="def-type">[<var class="var">y</var>, <var class="var">i</var>, <var class="var">j</var>] =</code> <strong class="def-name">unique</strong> <code class="def-code-arguments">(…, "last")</code><a class="copiable-link" href="#index-unique-6"> ¶</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-unique-7"><span><code class="def-type">[<var class="var">y</var>, <var class="var">i</var>, <var class="var">j</var>] =</code> <strong class="def-name">unique</strong> <code class="def-code-arguments">(…, "legacy")</code><a class="copiable-link" href="#index-unique-7"> ¶</a></span></dt>
<dd><p>Return the unique elements of <var class="var">x</var>.
</p>
<p>If the input <var class="var">x</var> is a column vector then return a column vector;
Otherwise, return a row vector. <var class="var">x</var> may also be a cell array of
strings.
</p>
<p>If the optional argument <code class="code">"rows"</code> is given then return the unique
rows of <var class="var">x</var>. The input must be a 2-D numeric matrix to use this option.
</p>
<p>The optional argument <code class="code">"sorted"</code>/<code class="code">"stable"</code> controls the order
in which unique values appear in the output. The default is
<code class="code">"sorted"</code> and values in the output are placed in ascending order.
The alternative <code class="code">"stable"</code> preserves the order found in the input
<var class="var">x</var>.
</p>
<p>If requested, return column index vectors <var class="var">i</var> and <var class="var">j</var> such that
<code class="code"><var class="var">y</var> = <var class="var">x</var>(<var class="var">i</var>)</code> and <code class="code"><var class="var">x</var> = <var class="var">y</var>(<var class="var">j</var>)</code>.
</p>
<p>Additionally, if <var class="var">i</var> is a requested output then one of the flags
<code class="code">"first"</code> or <code class="code">"last"</code> may be given. If <code class="code">"last"</code> is
specified, return the highest possible indices in <var class="var">i</var>, otherwise, if
<code class="code">"first"</code> is specified, return the lowest. The default is
<code class="code">"first"</code>.
</p>
<p>Example 1 : sort order
</p>
<div class="example">
<div class="group"><pre class="example-preformatted">unique ([3, 1, 1, 2])
⇒ [1, 2, 3]
unique ([3, 1, 1, 2], "stable")
⇒ [3, 1, 2]
</pre></div></div>
<p>Example 2 : index selection
</p>
<div class="example">
<div class="group"><pre class="example-preformatted">[~, <var class="var">i</var>] = unique ([3, 1, 1, 2], "first")
⇒ <var class="var">i</var> = [2; 4; 1]
[~, <var class="var">i</var>] = unique ([3, 1, 1, 2], "last")
⇒ <var class="var">i</var> = [3; 4; 1]
</pre></div></div>
<p>Programming Notes: The input flag <code class="code">"legacy"</code> changes the algorithm
to be compatible with <small class="sc">MATLAB</small> releases prior to R2012b. Specifically,
The index ordering flag is changed to <code class="code">"last"</code>, and the shape of the
outputs <var class="var">i</var>, <var class="var">j</var> will follow the shape of the input <var class="var">x</var> rather
than always being column vectors.
</p>
<p><strong class="strong">See also:</strong> <a class="ref" href="#XREFuniquetol">uniquetol</a>, <a class="ref" href="Set-Operations.html#XREFunion">union</a>, <a class="ref" href="Set-Operations.html#XREFintersect">intersect</a>, <a class="ref" href="Set-Operations.html#XREFsetdiff">setdiff</a>, <a class="ref" href="Set-Operations.html#XREFsetxor">setxor</a>, <a class="ref" href="Set-Operations.html#XREFismember">ismember</a>.
</p></dd></dl>
<a class="anchor" id="XREFuniquetol"></a><span style="display:block; margin-top:-4.5ex;"> </span>
<dl class="first-deftypefn">
<dt class="deftypefn" id="index-uniquetol"><span><code class="def-type"><var class="var">c</var> =</code> <strong class="def-name">uniquetol</strong> <code class="def-code-arguments">(<var class="var">A</var>)</code><a class="copiable-link" href="#index-uniquetol"> ¶</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-uniquetol-1"><span><code class="def-type"><var class="var">c</var> =</code> <strong class="def-name">uniquetol</strong> <code class="def-code-arguments">(<var class="var">A</var>, <var class="var">tol</var>)</code><a class="copiable-link" href="#index-uniquetol-1"> ¶</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-uniquetol-2"><span><code class="def-type"><var class="var">c</var> =</code> <strong class="def-name">uniquetol</strong> <code class="def-code-arguments">(…, <var class="var">property</var>, <var class="var">value</var>)</code><a class="copiable-link" href="#index-uniquetol-2"> ¶</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-uniquetol-3"><span><code class="def-type">[<var class="var">c</var>, <var class="var">ia</var>, <var class="var">ic</var>] =</code> <strong class="def-name">uniquetol</strong> <code class="def-code-arguments">(…)</code><a class="copiable-link" href="#index-uniquetol-3"> ¶</a></span></dt>
<dd><p>Return the unique elements of <var class="var">A</var> within tolerance <var class="var">tol</var>.
</p>
<p>Two values, <var class="var">x</var> and <var class="var">y</var>, are within relative tolerance if
<code class="code">abs (<var class="var">x</var> - <var class="var">y</var>) <= <var class="var">tol</var> * max (abs (<var class="var">A</var>(:)))</code>.
</p>
<p>The input <var class="var">A</var> must be a real (non-complex) floating point type (double
or single).
</p>
<p>If <var class="var">tol</var> is unspecified, the default tolerance is 1e-12 for double
precision input or 1e-6 for single precision input.
</p>
<p>The function may also be called with the following optional property/value
pairs. Property/value pairs must be passed after other input arguments:
</p>
<dl class="table">
<dt><code class="code">"ByRows"</code> (default: <code class="code">false</code>)</dt>
<dd><p>When true, return the unique rows of <var class="var">A</var>. <var class="var">A</var> must be a 2-D array
to use this option. For rows, the criteria for uniqueness is changed to
<code class="code">all (abs (<var class="var">x</var> - <var class="var">y</var>) <= <var class="var">tol</var>*max (abs (<var class="var">A</var>),[],1))</code>
which compares each column component of a row against a column-specific
tolerance.
</p>
</dd>
<dt><code class="code">"DataScale"</code></dt>
<dd><p>The tolerance test is changed to
<code class="code">abs (<var class="var">x</var> - <var class="var">y</var>) <= <var class="var">tol</var>*<var class="var">DS</var></code> where <var class="var">DS</var> is a
scalar unless the property <code class="code">"ByRows"</code> is true. In that case, <var class="var">DS</var>
can either be a scalar or a vector with a length equal to the number of
columns in <var class="var">A</var>. Using a value of <code class="code">1.0</code> for <var class="var">DS</var> will change
the tolerance from a relative one to an absolute tolerance. Using a value
of <code class="code">Inf</code> will disable testing.
</p>
</dd>
<dt><code class="code">"OutputAllIndices"</code> (default: <code class="code">false</code>)</dt>
<dd><p>When true, <var class="var">ia</var> is a cell array (not a vector) that contains the indices
for <em class="emph">all</em> elements in <var class="var">A</var> that are within tolerance of a value in
<var class="var">C</var>. That is, each cell in <var class="var">ia</var> corresponds to a single unique
value in <var class="var">C</var>, and the values in each cell correspond to locations in
<var class="var">A</var>.
</p></dd>
</dl>
<p>The output <var class="var">c</var> is a row vector if the input <var class="var">A</var> is a row vector.
For all other cases, a column vector is returned.
</p>
<p>The optional output <var class="var">ia</var> is a column index vector such that
<code class="code"><var class="var">c</var> = <var class="var">A</var>(<var class="var">ia</var>)</code>. If the <code class="code">"ByRows"</code> property is
true, the condition is <code class="code"><var class="var">c</var> = <var class="var">A</var>(<var class="var">ia</var>, :)</code>. If the
<code class="code">"OutputAllIndices"</code> property is true, then the values
<code class="code"><var class="var">A</var>(<var class="var">ia</var>{<var class="var">i</var>})</code> are all within tolerance of the unique
value <code class="code"><var class="var">c</var>(<var class="var">i</var>)</code>.
</p>
<p>The optional output <var class="var">ic</var> is a column index vector such that
<code class="code"><var class="var">A</var> = <var class="var">c</var>(<var class="var">ic</var>)</code> when <var class="var">A</var> is a vector. When <var class="var">A</var>
is a matrix, <code class="code"><var class="var">A</var>(:) = <var class="var">c</var>(<var class="var">ic</var>)</code>. If the <code class="code">"ByRows"</code>
property is true then <code class="code"><var class="var">A</var> = <var class="var">c</var>(<var class="var">ic</var>,:)</code>.
</p>
<p>Example: small round-off errors require <code class="code">uniquetol</code>, not <code class="code">unique</code>
</p>
<div class="example">
<div class="group"><pre class="example-preformatted">x = [1:5];
## Inverse_Function (Function (x)) should return exactly x
y = exp (log (x));
D = unique ([x, y])
⇒ [1 2 3 3 4 5 5]
C = uniquetol ([x, y])
⇒ [1 2 3 4 5]
</pre></div></div>
<p><strong class="strong">See also:</strong> <a class="ref" href="#XREFunique">unique</a>, <a class="ref" href="Set-Operations.html#XREFunion">union</a>, <a class="ref" href="Set-Operations.html#XREFintersect">intersect</a>, <a class="ref" href="Set-Operations.html#XREFsetdiff">setdiff</a>, <a class="ref" href="Set-Operations.html#XREFsetxor">setxor</a>, <a class="ref" href="Set-Operations.html#XREFismember">ismember</a>.
</p></dd></dl>
<ul class="mini-toc">
<li><a href="Set-Operations.html" accesskey="1">Set Operations</a></li>
</ul>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Polynomial-Manipulations.html">Polynomial Manipulations</a>, Previous: <a href="Statistics.html">Statistics</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|