* Bugs 16337 16455 fixed: [..,..,ku] = unique(..) implemented
[scilab.git] / scilab / modules / elementary_functions / help / ru_RU / setoperations / unique.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4  * Copyright (C) 2008 - INRIA
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  * Copyright (C) 2017 - 2019 - Samuel GOUGEON
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  -->
16 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
17           xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml"
18           xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
19           xmlns:scilab="http://www.scilab.org" xml:id="unique" xml:lang="ru">
20     <refnamediv>
21         <refname>unique</refname>
22         <refpurpose>удалить все повторяющиеся компоненты из вектора или матрицы</refpurpose>
23     </refnamediv>
24     <refsynopsisdiv>
25         <title>Синтаксис</title>
26         <synopsis>
27             [U, km, ku, nb] = unique(M)
28             [U, km, ku, nb] = unique(M, orient)
29             [U, km, ku, nb] = unique(.., "keepOrder")
30             [U, km, ku, nb] = unique(.., "uniqueNan")
31         </synopsis>
32     </refsynopsisdiv>
33     <refsection role="parameters">
34         <title>Аргументы</title>
35         <variablelist>
36             <varlistentry>
37                 <term>M</term>
38                 <listitem>
39                     <para>
40                         вектор, матрица или гиперматрица логических значений, чисел или текстов.
41                     </para>
42                 </listitem>
43             </varlistentry>
44             <varlistentry>
45                 <term>orient</term>
46                 <listitem>
47                     <para>флаг с возможными значениями: 1 или "r", 2 или "c".
48                         Не может использоваться, если <varname>M</varname> является гиперматрицей.
49                     </para>
50                 </listitem>
51             </varlistentry>
52             <varlistentry>
53                 <term>U</term>
54                 <listitem>
55                     <para>
56                       <itemizedlist>
57                         <listitem>
58                             <para>
59                               Если <varname>orient</varname> не используется: вектор извлечённых
60                               <varname>M</varname> компонентов, сортированных в полядке возрастания.
61                               Если <varname>M</varname> является вектором-строкой, то <varname>U</varname>
62                               так же является вектором-строкой. В случаях всех иных <varname>M</varname>
63                               <varname>U</varname> является вектором-столбцом.
64                             </para>
65                         </listitem>
66                         <listitem>
67                           Если <varname>orient</varname> используется: матрица извлечённых
68                           <varname>M</varname> строк или столбцов, сортированных в лексикографическом
69                           порядке возрастания.
70                         </listitem>
71                       </itemizedlist>
72                     </para>
73                 </listitem>
74             </varlistentry>
75             <varlistentry>
76                 <term>km</term>
77                 <listitem>
78                     <para>
79                       Вектор индексов первых встреченных значений, таких что
80                       <literal>U = M(km)</literal> или <literal>U = M(km,:)</literal>
81                       или <literal>U = M(:,km)</literal>.
82                     </para>
83                     <para>
84                         <varname>km</varname> является строкой, если <varname>M</varname> является
85                         строкой или если используется <literal>orient="c"</literal>. В проитвном случае
86                         это столбец.
87                     </para>
88                 </listitem>
89             </varlistentry>
90             <varlistentry>
91                 <term>ku</term>
92                 <listitem>
93                     Массив индексов в <varname>U</varname>, таких что в соответствии с опцией
94                     <varname>orient</varname>
95                     <itemizedlist>
96                         <listitem>
97                           "*": <varname>ku</varname> имеет размер <literal>size(M)</literal>, и <literal>U(ku) = M</literal>
98                         </listitem>
99                         <listitem>
100                             "r": <varname>ku</varname> имеет размер <literal>[size(M,1), 1]</literal>, и <literal>U(ku,:) = M</literal>
101                         </listitem>
102                         <listitem>
103                             "c": <varname>ku</varname> имеет размер <literal>[1, size(M,2)]</literal>, и <literal>U(:,ku) = M</literal>
104                         </listitem>
105                     </itemizedlist>
106                     <para/>
107                 </listitem>
108             </varlistentry>
109             <varlistentry>
110                 <term>nb</term>
111                 <listitem>
112                     <para>
113                       Вектор целых чисел > 0 той же формы, что и <varname>k</varname>:
114                       количество случаев <varname>M</varname> соответствующих непродублированных элементов
115                       (компонентов, строк, столбцов) возвращаемых в <varname>U</varname>.
116                     </para>
117                 </listitem>
118             </varlistentry>
119         </variablelist>
120     </refsection>
121     <refsection role="description">
122         <title>Описание</title>
123         <para>
124             <literal>unique(M)</literal> возвращает вектор, который содержит уникальные элементы
125             <literal>M</literal> в порядке возрастания.
126         </para>
127         <para>
128             <literal>unique(M,"r")</literal> или <literal>unique(M,1)</literal> возвращает
129             уникальные строки <literal>M</literal> в лексикографическом порядке возрастания.
130         </para>
131         <para>
132             <literal>unique(M,"c")</literal> или <literal>unique(M,2)</literal> возвращает
133             уникальные столбцы <literal>M</literal> в лексикографическом порядке возрастания.
134         </para>
135         <para>
136             <literal>unique(M,.. "keepOrder")</literal> возвращает <varname>M</varname> недублированных
137             входов в их исходном порядке в <varname>M</varname>.  <literal>"keepOrder"</literal> нечувствителен
138             к регистру.
139         </para>
140         <para>
141             <literal>unique(M,.. "uniqueNan")</literal> принимает все значения Nan одинаковыми и не дублирует их.
142             По умолчанию любой Nan отличается от другого Nan включая себя самого: <literal>%nan&lt;>%nan</literal>
143             равен истине, пока не будет использоваться <literal>"uniqueNan"</literal>. Определение
144             <literal>"uniqueNan"</literal> нечувствительно к регистру.
145         </para>
146         <para>
147             Для логических значений, <literal>unique(…)</literal> полезна главным образом с опциями
148             <literal>"r"</literal> or <literal>"c"</literal>.
149         </para>
150         <para>
151             <note>
152                 Комплексные числа сортируются сначала по амплитудам, а затем по фазам в [-π,π].
153             </note>
154         </para>
155     </refsection>
156     <refsection role="examples">
157         <title>Примеры</title>
158         <para>С некотороми числами:</para>
159         <programlisting role="example"><![CDATA[
160 M = int8([2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
161           0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
162           ])
163 [u, km] = unique(M)
164 [uc, kmc] = unique(M, "c")
165  ]]></programlisting>
166     <screen><![CDATA[
167 --> M
168  M =
169   2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
170   0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
171
172 --> [u, km] = unique(M)
173  u  =
174   0
175   1
176   2
177
178  km  =
179    2.
180    4.
181    1.
182
183 --> [uc, kmc] = unique(M, "c")
184  uc  =
185   0  0  0  1  1  1  2  2
186   0  1  2  0  1  2  0  2
187
188  kmc  =
189    14.   2.   11.   12.   5.   6.   1.   3.
190 ]]></screen>
191         <para>С комплексными числами:</para>
192         <programlisting role="example"><![CDATA[
193 i = %i;
194 c = [1+i, 1-i, -i, i, -i, 1+i]
195 [u, k] = unique(c)
196 [uc, kc] = unique(c, "c")
197  ]]></programlisting>
198     <screen><![CDATA[
199 --> c = [1+i, 1-i, -i, i, -i, 1+i]
200  c  =
201    1. + i    1. - i    0. - i    0. + i    0. - i    1. + i
202
203 --> [u, k] = unique(c)
204  u  =
205    0. - i    0. + i    1. - i    1. + i
206  k  =
207    3.   4.   2.   1.
208
209 --> [uc, kc] = unique(c, "c")
210  uc  =
211    0. - i    0. + i    1. - i    1. + i
212  kc  =
213    3.   4.   2.   1.
214 ]]></screen>
215
216     <para>С текстом:</para>
217         <programlisting role="example"><![CDATA[
218 t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
219      "AA" "AB" "AA" "AA" "BB" "BB" "BB" "BA" "AB" "AB" "BB" "BB" "AB" "AB" "AA"
220     ]
221 u = unique(t)'
222 [u, kt, ku, nb] = unique(t(1,:))
223 [u, kt] = unique(t(1,:), "keepOrder")  // сохранение исходного порядка элементов строки №1
224 [uc, ktc, kuc, nb] = unique(t, "c")
225 [uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // сохранение исходного порядка столбцов
226 [and(t(:,ktc)==uc), and(uc(:,kuc)==t) ]
227  ]]></programlisting>
228     <screen><![CDATA[
229 --> t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
230   >      "AA" "AB" "AA" "AA" "BB" "BB" "BB" "BA" "AB" "AB" "BB" "BB" "AB" "AB" "AA"
231   >     ]
232  t  =
233 !BA  BB  AB  BA  AB  BA  AB  AB  BA  AA  AB  BA  BA  BA  AA  !
234 !AA  AB  AA  AA  BB  BB  BB  BA  AB  AB  BB  BB  AB  AB  AA  !
235
236 --> u = unique(t)'
237  u  =
238 !AA  AB  BA  BB  !
239
240 --> [u, kt, ku, nb] = unique(t(1,:))
241  u  =
242 !AA  AB  BA  BB  !
243
244  kt  =
245    10.   3.   1.   2.
246
247  nb  =
248    2.   5.   7.   1.
249
250 --> [u, kt] = unique(t(1,:), "keepOrder")  // сохранение исходного порядка
251  u  =
252 !BA  BB  AB  AA  !
253
254  kt  =
255    1.   2.   3.   10.
256
257 --> [uc, ktc, kuc, nb] = unique(t, "c")
258  uc  =
259 !AA  AA  AB  AB  AB  BA  BA  BA  BB  !             сортированные столбцы
260 !AA  AB  AA  BA  BB  AA  AB  BB  AB  !
261
262  ktc  =
263    15.   10.   3.   8.   5.   1.   9.   6.   2.
264
265  nb  =
266    1.   1.   1.   1.   3.   2.   3.   2.   1.
267
268 --> [uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // сохранение исходного порядка
269  uc  =
270 !BA  BB  AB  AB  BA  AB  BA  AA  AA  !
271 !AA  AB  AA  BB  BB  BA  AB  AB  AA  !
272
273  ktc  =
274    1.   2.   3.   5.   6.   8.   9.   10.   15.
275
276  nb  =
277    2.   1.   1.   3.   2.   1.   3.   1.   1.
278
279 --> [and(t(:,ktc)==uc), and(uc(:,kuc)==t) ]
280  ans  =
281   T  T
282 ]]></screen>
283         <para/>
284         <para>Со значениями Nan (и Inf). Опция "uniqueNan":</para>
285         <programlisting role="example"><![CDATA[
286 M = [2  2  %nan  1     2  0     1  %nan  0    %nan
287      1  0  1     %nan  0  %inf  0  1     %inf 1
288     ];
289 [v, km, kv, n] = unique(M); v',n'
290 [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
291 unique(M, "c")
292 [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
293  ]]></programlisting>
294     <screen><![CDATA[
295 --> M
296  M  =
297    2.   2.   Nan   1.    2.   0.    1.   Nan   0.    Nan
298    1.   0.   1.    Nan   0.   Inf   0.   1.    Inf   1.
299
300 --> [v, km, kv, n] = unique(M); v',n'
301  ans  =
302    0.   1.   2.   Inf   Nan   Nan   Nan   Nan
303
304  ans  =
305    5.   6.   3.   2.   1.   1.   1.   1.
306
307 --> [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
308  ans  =
309    0.   1.   2.   Inf   Nan
310
311  ans  =
312    5.   6.   3.   2.   4.
313
314 --> unique(M, "c")
315  ans  =
316    0.    1.   1.    2.   2.   Nan   Nan   Nan
317    Inf   0.   Nan   0.   1.   1.    1.    1.
318
319 --> [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
320  v  =
321    0.    1.   1.    2.   2.   Nan
322    Inf   0.   Nan   0.   1.   1.
323
324  kmc  =
325    6.   7.   4.   2.   1.   3.
326
327  n  =
328    2.   1.   1.   2.   1.   3.
329 ]]></screen>
330     </refsection>
331     <refsection role="see also">
332         <title>Смотрите также</title>
333         <simplelist type="inline">
334             <member>
335                 <link linkend="members">members</link>
336             </member>
337             <member>
338                 <link linkend="gsort">gsort</link>
339             </member>
340             <member>
341                 <link linkend="vectorfind">vectorfind</link>
342             </member>
343             <member>
344                 <link linkend="grep">grep</link>
345             </member>
346             <member>
347                 <link linkend="union">union</link>
348             </member>
349             <member>
350                 <link linkend="intersect">intersect</link>
351             </member>
352         </simplelist>
353     </refsection>
354     <refsection role="history">
355         <title>История</title>
356         <revhistory>
357             <revision>
358                 <revnumber>6.0.2</revnumber>
359                 <revdescription>
360                     unique() теперь может использоваться для удаления дубликатов комплексных чисел.
361                 </revdescription>
362             </revision>
363             <revision>
364                 <revnumber>6.1.0</revnumber>
365                 <revdescription>
366                     <itemizedlist>
367                         <listitem>
368                             Расширено до логических значений.
369                         </listitem>
370                         <listitem>
371                             Введены опции "keepOrder" и "uniqueNan".
372                         </listitem>
373                         <listitem>
374                             Введён четвертый выходной аргумент <literal>nb</literal>.
375                         </listitem>
376                     </itemizedlist>
377                 </revdescription>
378             </revision>
379             <revision>
380                 <revnumber>6.1.1</revnumber>
381                 <revdescription>
382                   Реализован третий выходной аргумент <literal>ku</literal>.
383                 </revdescription>
384             </revision>
385         </revhistory>
386     </refsection>
387 </refentry>