* Bug 15841 fixed: intersect() now accepts sparse
[scilab.git] / scilab / modules / elementary_functions / help / ru_RU / setoperations / intersect.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) 2018 - 2020 - 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="intersect" xml:lang="ru">
20     <refnamediv>
21         <refname>intersect</refname>
22         <refpurpose>
23             элементы, либо строки либо столбцы, имеющиеся в обоих входных массивах, без повторов
24         </refpurpose>
25     </refnamediv>
26     <refsynopsisdiv>
27         <title>Синтаксис</title>
28         <synopsis>
29             M = intersect(a, b)
30             M = intersect(a, b, orient)
31             [M, ka] = intersect(..)
32             [M, ka, kb] = intersect(..)
33         </synopsis>
34     </refsynopsisdiv>
35     <refsection>
36         <title>Аргументы</title>
37         <variablelist>
38             <varlistentry>
39                 <term>a, b</term>
40                 <listitem>
41                     векторы, матрицы или гиперматрицы логических значений,
42                     кодированных целых чисел, вещественных или комплексных чисел,
43                     или текста. <varname>a</varname> и <varname>b</varname> должны
44                     иметь одинаковый тип данных.
45                     Для текстовых входных данных принимаются символы UTF.
46                     Принимаются разреженные числовые или логические матрицы: либо
47                     <varname>a</varname> либо <varname>b</varname> либо как
48                     <varname>a</varname>, так и <varname>b</varname> могут быть
49                     разрежёнными.
50                     <para/>
51                 </listitem>
52             </varlistentry>
53             <varlistentry>
54                 <term>orient</term>
55                 <listitem>
56                     флаг с возможными значениями: 1 или "r", 2 или "c". Не может
57                     использоваться, если <varname>a</varname> или/и <varname>b</varname>
58                     являются гиперматрицами.
59                     <para/>
60                 </listitem>
61             </varlistentry>
62             <varlistentry>
63                 <term>M</term>
64                 <listitem>
65                     <para>
66                         матрица того же типа данных, что и <varname>a</varname> и
67                         <varname>b</varname>.
68                         <itemizedlist>
69                             <listitem>
70                                 Без <varname>orient</varname>: <varname>M</varname>
71                                 является вектором-строкой.
72                             </listitem>
73                             <listitem>
74                                 С <literal>orient="r"|1</literal>: <varname>M</varname>
75                                 является матрицей, накапливающей общие строки
76                                 <varname>a</varname> и <varname>b</varname>.
77                             </listitem>
78                             <listitem>
79                                 С <literal>orient="c"|2</literal>: <varname>M</varname>
80                                 является матрицей, накапливающей общие столбцы
81                                 <varname>a</varname> и <varname>b</varname>.
82                             </listitem>
83                         </itemizedlist>
84                     </para>
85                     <para>
86                         <varname>M</varname> является разрежённой, если либо
87                         <varname>a</varname> или <varname>b</varname> являются
88                         разрежёнными и ни одна не является пустой.
89                     </para>
90                 </listitem>
91             </varlistentry>
92             <varlistentry>
93                 <term>ka</term>
94                 <listitem>
95                     Плотный вектор-строка индексов в <varname>a</varname>.
96                     <para/>
97                 </listitem>
98             </varlistentry>
99             <varlistentry>
100                 <term>kb</term>
101                 <listitem>
102                     Плотный вектор-строка индексов в <varname>b</varname>.
103                     <para/>
104                 </listitem>
105             </varlistentry>
106         </variablelist>
107     </refsection>
108     <refsection>
109         <title>Описание</title>
110         <para>
111             <literal>intersect(a,b)</literal> возвращает вектор-строку уникальных
112             значений, присутствующих как в массиве <literal>a</literal> так и в
113             массиве <literal>b</literal>. Значения отсортированы в порядке возрастания
114             <itemizedlist>
115                 <listitem>
116                     для комплексных чисел: сначала в порядке возрастания амплитуды, затем в порядке возрастания фазы;
117                 </listitem>
118                 <listitem>
119                     для текстов: в алфавитном порядке.
120                 </listitem>
121             </itemizedlist>
122         </para>
123         <warning>
124             Два элемента <literal>NaN</literal> всегда считаются разными. Так,
125             <literal>NaN</literal> или строки или столбцы, имеющие <literal>NaN</literal>,
126             никогда не окажутся в результирующей <literal>M</literal>.
127         </warning>
128         <para>
129             <literal>[M, ka, kb] = intersect(a,b)</literal> дополнительно возвращает
130             векторы индексов <literal>ka</literal> и <literal>kb</literal> в
131             <literal>a</literal> и в <literal>b</literal> выбранных компонентов,
132             первых попавшихся так, что <literal>M=a(ka)</literal> и
133             <literal>M=b(kb)</literal>.
134         </para>
135         <refsect3>
136             <title>Общие строки или столбцы</title>
137         <para>
138             Когда указан аргумент <varname>orient</varname>, сравнение выполняется
139             между строками <literal>a</literal> и <literal>b</literal> -- каждая
140             из которых рассматривается как целое --, или между их столбцами.
141         </para>
142         <para>
143             <literal>intersect(a,b,"r")</literal> или <literal>intersect(a,b,1)</literal>
144             будет возвращать матрицу накопленных неповторяющихся строк, встреченных
145             как в  <literal>a</literal>, так и в <literal>b</literal>, сортированных
146             в лексикографическом порядке возрастания.
147             Если <literal>a</literal> и <literal>b</literal> не имеют одинаковое
148             количество столбцов, то будет возвращено <literal>[]</literal> без
149             сравнения величин.
150         </para>
151         <para>
152             <literal>[M,ka,kb] = intersect(a,b,"r")</literal> дополнительно возвращает
153             векторы <literal>ka</literal> и <literal>kb</literal> минимальных индексов
154             общих строк, соответственно в <literal>a</literal> и <literal>b</literal>,
155             так что <literal>M=a(ka,:)</literal> и <literal>M=b(kb,:)</literal>.
156         </para>
157         <para>
158             <literal>intersect(a,b,"c")</literal> или <literal>intersect(a,b,2)</literal>
159             делает то же самое, но для столбцов.
160         </para>
161         </refsect3>
162     </refsection>
163     <refsection>
164         <title>Примеры</title>
165         <programlisting role="example"><![CDATA[
166 A = grand(3, 3, "uin", 0, 9)
167 B = grand(2, 4, "uin", 0, 9)
168 intersect(A, B)
169 [N, ka, kb] = intersect(A,B);
170 ka, kb
171  ]]></programlisting>
172     <screen><![CDATA[
173 --> A = grand(3, 3, "uin", 0, 9)
174  A  =
175    0.   6.   4.
176    6.   6.   6.
177    2.   7.   9.
178
179 --> B = grand(2, 4, "uin", 0, 9)
180  B  =
181    1.   8.   0.   2.
182    6.   2.   2.   1.
183
184 --> intersect(A, B)
185  ans  =
186    0.   2.   6.
187
188 --> [N, ka, kb] = intersect(A,B);
189 --> ka, kb
190  ka  =
191    1.   3.   2.
192  kb  =
193    5.   4.   2.
194 ]]></screen>
195     <para>
196         В вышеприведённом примере обратите внимание, что 6 встречена четыре раза
197         в <varname>A</varname> с индексами [2 4 5 8].
198         Только минимальный индекс 2 возвращается в <varname>ka</varname>. Та же
199         ситуация для 2 в <varname>B</varname>.
200     </para>
201     <para/>
202     <para>
203     Значения <literal>NaN</literal> никогда не могут быть в результате:
204     </para>
205     <programlisting role="example"><![CDATA[
206 %nan == %nan
207 intersect([1 -2 %nan 3 6], [%nan 1:3])
208  ]]></programlisting>
209     <screen><![CDATA[
210 --> %nan == %nan
211  ans  =
212   F
213
214 --> intersect([1 -2 %nan 3 6], [%nan 1:3])
215  ans  =
216    1.   3.
217 ]]></screen>
218     <para/>
219     <para>
220         <literal>intersect()</literal> может также обрабатывать некоторые символы
221         или тексты. Поскольку Scilab превосходно работает с символами UTF, то здесь
222         пример с некоторым арабским содержимым, получающим символы, присутствующими
223         в обоих предложениях:
224     </para>
225         <programlisting role="example"><![CDATA[
226 A = strsplit("هو برنامج علمي كبير ""Scilab""")'
227 B = strsplit("فهو حر ومفتوح")'
228 intersect(A,B)
229  ]]></programlisting>
230     <screen><![CDATA[
231 --> A = strsplit("هو برنامج علمي كبير ""Scilab""")'
232  A  =
233 !ه  و     ب  ر  ن  ا  م  ج     ع  ل  م  ي     ك  ب  ي  ر     "  S  c  i  l  a  b  "  !
234
235 --> B = strsplit("فهو حر ومفتوح")'
236  B  =
237 !ف  ه  و     ح  ر     و  م  ف  ت  و  ح  !
238
239 --> intersect(A,B)
240  ans  =
241 !   ر  م  ه  و  !
242 ]]></screen>
243     <para/>
244     <para>
245         Постолбцовая или построковая обработка двух матриц: здесь мы обрабатываем
246         2 матрицы знаковых 1-битных целых и получаем общие столбцы:
247     </para>
248     <programlisting role="example"><![CDATA[
249 A = int8(grand(3,5,"uin",0,1))
250 B = int8(grand(3,9,"uin",0,1))
251 [M,ka,kb] = intersect(A, B, "c");
252 M, ka, kb
253  ]]></programlisting>
254     <screen><![CDATA[
255 --> A = int8(grand(3,5,"uin",0,1))
256  A  =
257   0  0  1  1  1
258   0  0  1  1  0
259   0  0  0  0  1
260
261 --> B = int8(grand(3,9,"uin",0,1))
262  B  =
263   1  0  1  1  1  0  1  1  1
264   1  0  0  1  1  1  0  0  0
265   1  0  1  0  1  1  1  0  0
266
267 --> [M,ka,kb] = intersect(A, B, "c");
268 --> M, ka, kb
269  M  =
270   0  1  1
271   0  0  1
272   0  1  0
273
274  ka  =
275    1.   5.   3.
276
277  kb  =
278    2.   3.   4.
279 ]]></screen>
280     <para/>
281     <para>
282         <literal>intersect()</literal> для логических значений главным образом
283         полезны с опцией <literal>"r"</literal> или <literal>"c"</literal>. Здесь
284         пример с разрежённой матрицей логических значений:
285     </para>
286     <programlisting role="example"><![CDATA[
287 [F, T] = (%f, %t);
288 A = [F F T F T F ; T F F T T T ; T T F T F F]
289 B = [F T F T F F ; T F F F T F ; F T F F T F]
290 [M,ka,kb] = intersect(A, sparse(B), "c");
291 issparse(M), full(M), ka, kb
292  ]]></programlisting>
293     <screen><![CDATA[
294 --> A = [F F T F T F ; T F F T T T ; T T F T F F]
295  A  =
296   F F T F T F
297   T F F T T T
298   T T F T F F
299
300 --> B = [F T F T F F ; T F F F T F ; F T F F T F]
301  B  =
302   F T F T F F
303   T F F F T F
304   F T F F T F
305
306 --> [M,ka,kb] = intersect(A, sparse(B), "c");
307 --> issparse(M), full(M), ka, kb
308  ans  =
309   T
310
311  ans  =
312   F F T
313   T T F
314   F T F
315
316  ka  =
317    6.   1.   3.
318
319  kb  =
320    1.   5.   4.
321 ]]></screen>
322     </refsection>
323     <refsection role="see also">
324         <title>Смотрите также</title>
325         <simplelist type="inline">
326             <member>
327                 <link linkend="members">members</link>
328             </member>
329             <member>
330                 <link linkend="unique">unique</link>
331             </member>
332             <member>
333                 <link linkend="gsort">gsort</link>
334             </member>
335             <member>
336                 <link linkend="union">union</link>
337             </member>
338         </simplelist>
339     </refsection>
340     <refsection role="history">
341         <title>История</title>
342         <revhistory>
343             <revision>
344                 <revnumber>6.1.0</revnumber>
345                 <revdescription>
346                     Теперь принимаются комплексные числа.
347                 </revdescription>
348             </revision>
349             <revision>
350                 <revnumber>6.1.1</revnumber>
351                 <revdescription>
352                     Теперь принимаются разрежённые матрицы (числовые или логические значения).
353                 </revdescription>
354             </revision>
355         </revhistory>
356     </refsection>
357 </refentry>