éléments, lignes, ou colonnes communs aux 2 tableaux d'entrée, sans doublon
M = intersect(a, b) M = intersect(a, b, orient) [M, ka] = intersect(..) [M, ka, kb] = intersect(..)
vecteurs, matrices ou hypermatrices d'entiers encodés, de nombres décimaux
réels, ou de texte. a et b doivent
être du même type de données, mais ont des tailles indépendantes.
Pour les données texte, les caractères UTF sont admis.
indicateur de traitement par colonnes ou lignes. Valeurs possibles :
1 ou "r", 2 ou "c". Ne peut pas être utilisé lorsque a
ou/et b est une hypermatrice.
Matrice du type de a et b.
orient: M est un vecteur
ligne.orient="r"|1: M est une
matrice empilant les lignes communes à a et
b.orient="c"|2: M est une
matrice concaténant les colonnes communes à a et
b.Vecteur ligne d'indices dans a.
Vecteur lignes d'indices dans b.
intersect(a,b) produit un vecteur ligne des éléments dédoublonnés
présents à la fois dans les tableaux a et b,
triés en ordre croissant.
![]() | Deux éléments NaN étant toujours considérés comme différents, NaN ou les lignes ou
colonnes en contenant ne seront jamais présents dans le résultat M. |
[M, ka, kb] = intersect(a,b) fournit en outre les vecteurs lignes
ka et kb des indices dans a
et b des éléments communs rencontrés à leur première position,
tels que M=a(ka) and M=b(kb).
Lorsque l'option orient est utilisée, la comparaison entre
a et b est réalisée en considérant leurs lignes
ou leurs colonnes dans leur entier.
intersect(a,b,"r") ou intersect(a,b,1) fournira
la matrice des lignes (sans doublons) présentes à la fois dans a et
dans b, triées en ordre lexicographique croissant.
Lorsque a et b n'ont pas le même nombre de
colonnes, [] est retourné sans comparer aucun élément.
[M,ka,kb]=intersect(a,b,"r") fournit en outre les vecteurs
ka et kb des indices minimaux des lignes communes,
indices respectivement dans a dans b. On a alors
M=a(ka,:) et M=b(kb,:).
intersect(a,b,"c") ou intersect(a,b,2) réalise
la même chose sur les colonnes.
A = grand(3, 3, "uin", 0, 9) B = grand(2, 4, "uin", 0, 9) intersect(A, B) [N, ka, kb] = intersect(A,B); ka, kb | ![]() | ![]() |
--> A = grand(3, 3, "uin", 0, 9) A = 0. 6. 4. 6. 6. 6. 2. 7. 9. --> B = grand(2, 4, "uin", 0, 9) B = 1. 8. 0. 2. 6. 2. 2. 1. --> intersect(A, B) ans = 0. 2. 6. --> [N, ka, kb] = intersect(A,B); --> ka, kb ka = 1. 3. 2. kb = 5. 4. 2.
Dans l'exemple ci-dessus, on notera que 6 est présent quatre fois dans A, aux indices [2 4 5 8]. Seule la position d'indice minimal 2 est donnée dans ka. Même situation pour 2 dans B.
La valeur NaN (Not-a-Number) ne peut jamais figurer dans le résultat :
--> %nan == %nan ans = F --> intersect([1 -2 %nan 3 6], [%nan 1:3]) ans = 1. 3.
intersect() peut aussi traiter des caractères ou du texte. Scilab sait traiter les textes encodés en UTF. Voici un exemple avec du texte en arabe, afin d'obtenir les caractères arabes communs à deux phrases :
--> A = strsplit("هو برنامج علمي كبير ""Scilab""")'
A =
!ه و ب ر ن ا م ج ع ل م ي ك ب ي ر " S c i l a b " !
--> B = strsplit("فهو حر ومفتوح")'
B =
!ف ه و ح ر و م ف ت و ح !
--> intersect(A,B)
ans =
! ر م ه و !
Lignes ou colonnes communes à deux matrices : l'exemple suivant extrait les colonnes communes à deux matrices d'entiers signés encodés sur un octet :
A = int8(grand(3,5,"uin",0,1)) B = int8(grand(3,9,"uin",0,1)) [M,ka,kb] = intersect(A, B, "c"); M, ka, kb | ![]() | ![]() |
--> A = int8(grand(3,5,"uin",0,1)) A = 0 0 1 1 1 0 0 1 1 0 0 0 0 0 1 --> B = int8(grand(3,9,"uin",0,1)) B = 1 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0 1 1 1 0 0 --> [M,ka,kb] = intersect(A, B, "c"); --> M, ka, kb M = 0 1 1 0 0 1 0 1 0 ka = 1. 5. 3. kb = 2. 3. 4.