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="fr">
21 <refname>intersect</refname>
23 éléments, lignes, ou colonnes communs aux 2 tableaux d'entrée, sans doublon
27 <title>Syntaxe</title>
30 M = intersect(a, b, orient)
31 [M, ka] = intersect(..)
32 [M, ka, kb] = intersect(..)
36 <title>Arguments</title>
41 vecteurs, matrices ou hypermatrices de booléens, d'entiers encodés, de nombres
42 réels ou complexes, ou de texte. <varname>a</varname> et <varname>b</varname>
43 doivent être du même type de données, mais ont des tailles indépendantes.
44 Pour les données texte, les caractères UTF sont admis.
45 Les matrices creuses booléennes ou numériques sont acceptées :
46 <varname>a</varname> ou <varname>b</varname> ou les deux peuvent être creuses.
53 indicateur de traitement par colonnes ou lignes. Valeurs possibles :
54 1 ou "r", 2 ou "c". Ne peut pas être utilisé lorsque <varname>a</varname>
55 ou/et <varname>b</varname> est une hypermatrice.
63 Matrice du type de <varname>a</varname> et <varname>b</varname>.
66 Sans <varname>orient</varname>: <varname>M</varname> est un vecteur
70 Avec <literal>orient="r"|1</literal>: <varname>M</varname> est une
71 matrice empilant les lignes communes à <varname>a</varname> et
75 Avec <literal>orient="c"|2</literal>: <varname>M</varname> est une
76 matrice concaténant les colonnes communes à <varname>a</varname> et
82 <varname>M</varname> est creuse dés que <varname>a</varname> ou
83 <varname>b</varname> est creuse et aucune n'est vide.
90 Vecteur ligne dense d'indices dans <varname>a</varname>.
97 Vecteur ligne dense d'indices dans <varname>b</varname>.
104 <title>Description</title>
106 <literal>intersect(a,b)</literal> produit un vecteur ligne des éléments dédoublonnés
107 présents à la fois dans les tableaux <literal>a</literal> et <literal>b</literal>,
108 triés en ordre croissant
111 pour les nombres complexes : par modules croissants, puis par phases croissantes.
114 pour le texte : par ordre alphabétique.
119 Deux éléments NaN étant toujours considérés comme différents, NaN ou les lignes ou
120 colonnes en contenant ne seront jamais présents dans le résultat <literal>M</literal>.
123 <literal>[M, ka, kb] = intersect(a,b)</literal> fournit en outre les vecteurs lignes
124 <literal>ka</literal> et <literal>kb</literal> des indices dans <literal>a</literal>
125 et <literal>b</literal> des éléments communs rencontrés à leur première position,
126 tels que <literal>M=a(ka)</literal> and <literal>M=b(kb)</literal>.
129 <title>Lignes ou colonnes en commun</title>
131 Lorsque l'option <varname>orient</varname> est utilisée, la comparaison entre
132 <literal>a</literal> et <literal>b</literal> est réalisée en considérant leurs lignes
133 ou leurs colonnes dans leur entier.
136 <literal>intersect(a,b,"r")</literal> ou <literal>intersect(a,b,1)</literal> fournira
137 la matrice des lignes (sans doublons) présentes à la fois dans <literal>a</literal> et
138 dans <literal>b</literal>, triées en ordre lexicographique croissant.
139 Lorsque <literal>a</literal> et <literal>b</literal> n'ont pas le même nombre de
140 colonnes, [] est retourné sans comparer aucun élément.
143 <literal>[M,ka,kb]=intersect(a,b,"r")</literal> fournit en outre les vecteurs
144 <literal>ka</literal> et <literal>kb</literal> des indices minimaux des lignes communes,
145 indices respectivement dans <literal>a</literal> dans <literal>b</literal>. On a alors
146 <literal>M=a(ka,:)</literal> et <literal>M=b(kb,:)</literal>.
149 <literal>intersect(a,b,"c")</literal> ou <literal>intersect(a,b,2)</literal> réalise
150 la même chose sur les colonnes.
155 <title>Exemples</title>
156 <programlisting role="example"><![CDATA[
157 A = grand(3, 3, "uin", 0, 9)
158 B = grand(2, 4, "uin", 0, 9)
160 [N, ka, kb] = intersect(A,B);
164 --> A = grand(3, 3, "uin", 0, 9)
170 --> B = grand(2, 4, "uin", 0, 9)
179 --> [N, ka, kb] = intersect(A,B);
187 Dans l'exemple ci-dessus, on notera que 6 est présent quatre fois dans A, aux indices [2 4 5 8].
188 Seule la position d'indice minimal 2 est donnée dans ka. Même situation pour 2 dans B.
192 La valeur NaN (Not-a-Number) ne peut jamais figurer dans le résultat :
194 <programlisting role="example"><![CDATA[
196 intersect([1 -2 %nan 3 6], [%nan 1:3])
203 --> intersect([1 -2 %nan 3 6], [%nan 1:3])
209 intersect() peut aussi traiter des caractères ou du texte. Scilab sait traiter les textes
210 encodés en UTF. Voici un exemple avec du texte en arabe, afin d'obtenir les caractères
211 arabes communs à deux phrases :
213 <programlisting role="example"><![CDATA[
214 A = strsplit("هو برنامج علمي كبير ""Scilab""")'
215 B = strsplit("فهو حر ومفتوح")'
219 --> A = strsplit("هو برنامج علمي كبير ""Scilab""")'
221 !ه و ب ر ن ا م ج ع ل م ي ك ب ي ر " S c i l a b " !
223 --> B = strsplit("فهو حر ومفتوح")'
225 !ف ه و ح ر و م ف ت و ح !
233 Lignes ou colonnes communes à deux matrices : l'exemple suivant extrait les colonnes communes
234 à deux matrices d'entiers signés encodés sur un octet :
236 <programlisting role="example"><![CDATA[
237 A = int8(grand(3,5,"uin",0,1))
238 B = int8(grand(3,9,"uin",0,1))
239 [M,ka,kb] = intersect(A, B, "c");
243 --> A = int8(grand(3,5,"uin",0,1))
249 --> B = int8(grand(3,9,"uin",0,1))
255 --> [M,ka,kb] = intersect(A, B, "c");
270 Pour des booléens, <literal>intersect()</literal> est utile essentiellement avec l'option
271 "r" ou "c". Voici un exemple avec une matrice booléenne creuse :
273 <programlisting role="example"><![CDATA[
275 A = [F F T F T F ; T F F T T T ; T T F T F F]
276 B = [F T F T F F ; T F F F T F ; F T F F T F]
277 [M,ka,kb] = intersect(A, sparse(B), "c");
278 issparse(M), full(M), ka, kb
281 --> A = [F F T F T F ; T F F T T T ; T T F T F F]
287 --> B = [F T F T F F ; T F F F T F ; F T F F T F]
293 --> [M,ka,kb] = intersect(A, sparse(B), "c");
294 --> issparse(M), full(M), ka, kb
310 <refsection role="see also">
311 <title>Voir aussi</title>
312 <simplelist type="inline">
314 <link linkend="members">members</link>
317 <link linkend="unique">unique</link>
320 <link linkend="gsort">gsort</link>
323 <link linkend="union">union</link>
327 <refsection role="history">
328 <title>Historique</title>
331 <revnumber>6.1.0</revnumber>
333 Nombres complexes désormais acceptés.
337 <revnumber>6.1.1</revnumber>
339 Matrices creuses numériques ou booléennes désormais acceptées.