1 <?xml version="1.0" encoding="UTF-8"?>
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
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.
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">
21 <refname>intersect</refname>
23 элементы, либо строки либо столбцы, имеющиеся в обоих входных массивах, без повторов
27 <title>Синтаксис</title>
30 M = intersect(a, b, orient)
31 [M, ka] = intersect(..)
32 [M, ka, kb] = intersect(..)
36 <title>Аргументы</title>
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> могут быть
56 флаг с возможными значениями: 1 или "r", 2 или "c". Не может
57 использоваться, если <varname>a</varname> или/и <varname>b</varname>
58 являются гиперматрицами.
66 матрица того же типа данных, что и <varname>a</varname> и
70 Без <varname>orient</varname>: <varname>M</varname>
71 является вектором-строкой.
74 С <literal>orient="r"|1</literal>: <varname>M</varname>
75 является матрицей, накапливающей общие строки
76 <varname>a</varname> и <varname>b</varname>.
79 С <literal>orient="c"|2</literal>: <varname>M</varname>
80 является матрицей, накапливающей общие столбцы
81 <varname>a</varname> и <varname>b</varname>.
86 <varname>M</varname> является разрежённой, если либо
87 <varname>a</varname> или <varname>b</varname> являются
88 разрежёнными и ни одна не является пустой.
95 Плотный вектор-строка индексов в <varname>a</varname>.
102 Плотный вектор-строка индексов в <varname>b</varname>.
109 <title>Описание</title>
111 <literal>intersect(a,b)</literal> возвращает вектор-строку уникальных
112 значений, присутствующих как в массиве <literal>a</literal> так и в
113 массиве <literal>b</literal>. Значения отсортированы в порядке возрастания
116 для комплексных чисел: сначала в порядке возрастания амплитуды, затем в порядке возрастания фазы;
119 для текстов: в алфавитном порядке.
124 Два элемента <literal>NaN</literal> всегда считаются разными. Так,
125 <literal>NaN</literal> или строки или столбцы, имеющие <literal>NaN</literal>,
126 никогда не окажутся в результирующей <literal>M</literal>.
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>.
136 <title>Общие строки или столбцы</title>
138 Когда указан аргумент <varname>orient</varname>, сравнение выполняется
139 между строками <literal>a</literal> и <literal>b</literal> -- каждая
140 из которых рассматривается как целое --, или между их столбцами.
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> без
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>.
158 <literal>intersect(a,b,"c")</literal> или <literal>intersect(a,b,2)</literal>
159 делает то же самое, но для столбцов.
164 <title>Примеры</title>
165 <programlisting role="example"><![CDATA[
166 A = grand(3, 3, "uin", 0, 9)
167 B = grand(2, 4, "uin", 0, 9)
169 [N, ka, kb] = intersect(A,B);
173 --> A = grand(3, 3, "uin", 0, 9)
179 --> B = grand(2, 4, "uin", 0, 9)
188 --> [N, ka, kb] = intersect(A,B);
196 В вышеприведённом примере обратите внимание, что 6 встречена четыре раза
197 в <varname>A</varname> с индексами [2 4 5 8].
198 Только минимальный индекс 2 возвращается в <varname>ka</varname>. Та же
199 ситуация для 2 в <varname>B</varname>.
203 Значения <literal>NaN</literal> никогда не могут быть в результате:
205 <programlisting role="example"><![CDATA[
207 intersect([1 -2 %nan 3 6], [%nan 1:3])
214 --> intersect([1 -2 %nan 3 6], [%nan 1:3])
220 <literal>intersect()</literal> может также обрабатывать некоторые символы
221 или тексты. Поскольку Scilab превосходно работает с символами UTF, то здесь
222 пример с некоторым арабским содержимым, получающим символы, присутствующими
223 в обоих предложениях:
225 <programlisting role="example"><![CDATA[
226 A = strsplit("هو برنامج علمي كبير ""Scilab""")'
227 B = strsplit("فهو حر ومفتوح")'
231 --> A = strsplit("هو برنامج علمي كبير ""Scilab""")'
233 !ه و ب ر ن ا م ج ع ل م ي ك ب ي ر " S c i l a b " !
235 --> B = strsplit("فهو حر ومفتوح")'
237 !ف ه و ح ر و م ف ت و ح !
245 Постолбцовая или построковая обработка двух матриц: здесь мы обрабатываем
246 2 матрицы знаковых 1-битных целых и получаем общие столбцы:
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");
255 --> A = int8(grand(3,5,"uin",0,1))
261 --> B = int8(grand(3,9,"uin",0,1))
267 --> [M,ka,kb] = intersect(A, B, "c");
282 <literal>intersect()</literal> для логических значений главным образом
283 полезны с опцией <literal>"r"</literal> или <literal>"c"</literal>. Здесь
284 пример с разрежённой матрицей логических значений:
286 <programlisting role="example"><![CDATA[
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
294 --> A = [F F T F T F ; T F F T T T ; T T F T F F]
300 --> B = [F T F T F F ; T F F F T F ; F T F F T F]
306 --> [M,ka,kb] = intersect(A, sparse(B), "c");
307 --> issparse(M), full(M), ka, kb
323 <refsection role="see also">
324 <title>Смотрите также</title>
325 <simplelist type="inline">
327 <link linkend="members">members</link>
330 <link linkend="unique">unique</link>
333 <link linkend="gsort">gsort</link>
336 <link linkend="union">union</link>
340 <refsection role="history">
341 <title>История</title>
344 <revnumber>6.1.0</revnumber>
346 Теперь принимаются комплексные числа.
350 <revnumber>6.1.1</revnumber>
352 Теперь принимаются разрежённые матрицы (числовые или логические значения).