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) 2018 - Samuel GOUGEON
7 * Copyright (C) 2012 - 2016 - Scilab Enterprises
9 * This file is hereby licensed under the terms of the GNU GPL v2.0,
10 * pursuant to article 5.3.4 of the CeCILL v.2.1.
11 * This file was originally licensed under the terms of the CeCILL v2.1,
12 * and continues to be available under such terms.
13 * For more information, see the COPYING file which you should have received
14 * along with this program.
17 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
18 xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml"
19 xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
20 xmlns:scilab="http://www.scilab.org" xml:id="intersect" xml:lang="fr">
22 <refname>intersect</refname>
24 éléments, lignes, ou colonnes communs aux 2 tableaux d'entrée, sans doublon
28 <title>Syntaxe</title>
31 M = intersect(a, b, orient)
32 [M, ka] = intersect(..)
33 [M, ka, kb] = intersect(..)
37 <title>Arguments</title>
42 vecteurs, matrices ou hypermatrices d'entiers encodés, de nombres réels ou
43 complexes, ou de texte. <varname>a</varname> et <varname>b</varname> doivent
44 être du même type de données, mais ont des tailles indépendantes.
45 Pour les données texte, les caractères UTF sont admis.
52 indicateur de traitement par colonnes ou lignes. Valeurs possibles :
53 1 ou "r", 2 ou "c". Ne peut pas être utilisé lorsque <varname>a</varname>
54 ou/et <varname>b</varname> est une hypermatrice.
62 Matrice du type de <varname>a</varname> et <varname>b</varname>.
65 Sans <varname>orient</varname>: <varname>M</varname> est un vecteur
69 Avec <literal>orient="r"|1</literal>: <varname>M</varname> est une
70 matrice empilant les lignes communes à <varname>a</varname> et
74 Avec <literal>orient="c"|2</literal>: <varname>M</varname> est une
75 matrice concaténant les colonnes communes à <varname>a</varname> et
85 Vecteur ligne d'indices dans <varname>a</varname>.
92 Vecteur lignes d'indices dans <varname>b</varname>.
99 <title>Description</title>
101 <literal>intersect(a,b)</literal> produit un vecteur ligne des éléments dédoublonnés
102 présents à la fois dans les tableaux <literal>a</literal> et <literal>b</literal>,
103 triés en ordre croissant
106 pour les nombres complexes : par modules croissants, puis par phases croissantes.
109 pour le texte : par ordre alphabétique.
114 Deux éléments NaN étant toujours considérés comme différents, NaN ou les lignes ou
115 colonnes en contenant ne seront jamais présents dans le résultat <literal>M</literal>.
118 <literal>[M, ka, kb] = intersect(a,b)</literal> fournit en outre les vecteurs lignes
119 <literal>ka</literal> et <literal>kb</literal> des indices dans <literal>a</literal>
120 et <literal>b</literal> des éléments communs rencontrés à leur première position,
121 tels que <literal>M=a(ka)</literal> and <literal>M=b(kb)</literal>.
124 <title>Lignes ou colonnes en commun</title>
126 Lorsque l'option <varname>orient</varname> est utilisée, la comparaison entre
127 <literal>a</literal> et <literal>b</literal> est réalisée en considérant leurs lignes
128 ou leurs colonnes dans leur entier.
131 <literal>intersect(a,b,"r")</literal> ou <literal>intersect(a,b,1)</literal> fournira
132 la matrice des lignes (sans doublons) présentes à la fois dans <literal>a</literal> et
133 dans <literal>b</literal>, triées en ordre lexicographique croissant.
134 Lorsque <literal>a</literal> et <literal>b</literal> n'ont pas le même nombre de
135 colonnes, [] est retourné sans comparer aucun élément.
138 <literal>[M,ka,kb]=intersect(a,b,"r")</literal> fournit en outre les vecteurs
139 <literal>ka</literal> et <literal>kb</literal> des indices minimaux des lignes communes,
140 indices respectivement dans <literal>a</literal> dans <literal>b</literal>. On a alors
141 <literal>M=a(ka,:)</literal> et <literal>M=b(kb,:)</literal>.
144 <literal>intersect(a,b,"c")</literal> ou <literal>intersect(a,b,2)</literal> réalise
145 la même chose sur les colonnes.
150 <title>Exemples</title>
151 <programlisting role="example"><![CDATA[
152 A = grand(3, 3, "uin", 0, 9)
153 B = grand(2, 4, "uin", 0, 9)
155 [N, ka, kb] = intersect(A,B);
159 --> A = grand(3, 3, "uin", 0, 9)
165 --> B = grand(2, 4, "uin", 0, 9)
174 --> [N, ka, kb] = intersect(A,B);
182 Dans l'exemple ci-dessus, on notera que 6 est présent quatre fois dans A, aux indices [2 4 5 8].
183 Seule la position d'indice minimal 2 est donnée dans ka. Même situation pour 2 dans B.
187 La valeur NaN (Not-a-Number) ne peut jamais figurer dans le résultat :
189 <programlisting role="example"><![CDATA[
191 intersect([1 -2 %nan 3 6], [%nan 1:3])
198 --> intersect([1 -2 %nan 3 6], [%nan 1:3])
204 intersect() peut aussi traiter des caractères ou du texte. Scilab sait traiter les textes
205 encodés en UTF. Voici un exemple avec du texte en arabe, afin d'obtenir les caractères
206 arabes communs à deux phrases :
208 <programlisting role="example"><![CDATA[
209 A = strsplit("هو برنامج علمي كبير ""Scilab""")'
210 B = strsplit("فهو حر ومفتوح")'
214 --> A = strsplit("هو برنامج علمي كبير ""Scilab""")'
216 !ه و ب ر ن ا م ج ع ل م ي ك ب ي ر " S c i l a b " !
218 --> B = strsplit("فهو حر ومفتوح")'
220 !ف ه و ح ر و م ف ت و ح !
228 Lignes ou colonnes communes à deux matrices : l'exemple suivant extrait les colonnes communes
229 à deux matrices d'entiers signés encodés sur un octet :
231 <programlisting role="example"><![CDATA[
232 A = int8(grand(3,5,"uin",0,1))
233 B = int8(grand(3,9,"uin",0,1))
234 [M,ka,kb] = intersect(A, B, "c");
238 --> A = int8(grand(3,5,"uin",0,1))
244 --> B = int8(grand(3,9,"uin",0,1))
250 --> [M,ka,kb] = intersect(A, B, "c");
264 <refsection role="see also">
265 <title>Voir aussi</title>
266 <simplelist type="inline">
268 <link linkend="members">members</link>
271 <link linkend="unique">unique</link>
274 <link linkend="gsort">gsort</link>
277 <link linkend="union">union</link>
281 <refsection role="history">
282 <title>Historique</title>
285 <revnumber>6.1.0</revnumber>
287 Les nombres complexes sont désormais acceptés.