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) 2017 - 2019 - 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="unique" xml:lang="fr">
21 <refname>unique</refname>
22 <refpurpose>extrait (et trie) les éléments distincts d'un vecteur, matrice, hypermatrice
26 <title>Séquence d'appel</title>
28 [U, km, ku, nb] = unique(M)
29 [U, km, ku, nb] = unique(M, orient)
30 [U, km, ku, nb] = unique(.., "keepOrder")
31 [U, km, ku, nb] = unique(.., "uniqueNan")
34 <refsection role="parameters">
35 <title>Paramètres</title>
41 vecteur, matrice, ou hypermatrice de booléens, de nombres, ou de textes.
49 1 ou "r", 2 ou "c". Ne peut pas être utilisé si <varname>M</varname> est
61 Sans <varname>orient</varname>: vecteur d'éléments de
62 <varname>M</varname> triés par ordre croissant.
63 Si <varname>M</varname> est un vecteur ligne, <varname>U</varname>
64 aussi. Dans tous les autres cas, <varname>U</varname> est un
69 Avec <varname>orient</varname>: Matrice de lignes ou de colonnes extraites
70 de <varname>M</varname>, triées par ordre lexicographique croissant.
80 Indices des éléments, lignes ou colonnes extraits, tels que
81 <literal>U = M(km)</literal> ou <literal>U = M(km,:)</literal>
82 ou <literal>U = M(:,km)</literal>.
85 <varname>km</varname> est un vecteur ligne si <varname>M</varname>
86 l'est aussi ou si <literal>orient="c"</literal> est utilisé.
87 Sinon <varname>km</varname> est en colonne.
94 Vecteur, matrice ou hypermatrice d'indices dans U, tel que, selon
95 l'option <varname>orient</varname>
98 "*": <varname>ku</varname> est de taille size(M), avec <literal>U(ku) = M</literal>
101 "r": <varname>ku</varname> est de taille [size(M,1), 1], avec <literal>U(ku,:) = M</literal>
104 "c": <varname>ku</varname> est de taille [1, size(M,2)], avec <literal>U(:,ku) = M</literal>
114 Vecteur d'entiers > 0, au format de <varname>km</varname> :
115 nombres d'exemplaires dans <varname>M</varname> de chaque entité
116 (élément, ligne, colonne) retournée dans <varname>U</varname>.
122 <refsection role="description">
123 <title>Description</title>
125 <literal>unique(M)</literal> renvoie un vecteur contenant les
126 valeurs distinctes contenues dans les termes de <literal>M</literal>
127 classées par ordre croissant.
130 <literal>unique(M,"r")</literal> ou
131 <literal>unique(M,1)</literal>retourne les lignes uniques de
132 <literal>M</literal> triées dans l'ordre lexicographique croissant.
135 <literal>unique(M,"c")</literal> or
136 <literal>unique(M,2)</literal>retourne les colonnes uniques
137 <literal>M</literal> triées dans l'ordre lexicographique croissant.
140 <literal>unique(M,.. "keepOrder")</literal> donne le vecteur des valeurs distinctes
141 de <varname>M</varname> selon leur ordre initial d'apparition dans <varname>M</varname>
142 (au lieu d'être par défaut triées par ordre croissant). L'indicateur
143 <literal>"keepOrder"</literal> est insensible aux minuscules/majuscules.
146 <literal>unique(M,.. "uniqueNan")</literal> considère toute valeur Nan comme égale
147 à toute autre Nan, et les dédoublonne comme pour n'importe quelle autre valeur numérique.
148 Par défaut, toute valeur Nan est distincte de toute autre Nan, y compris elle-même :
149 <literal>%nan<>%nan</literal> est vrai, à moins d'utiliser
150 <literal>"uniqueNan"</literal>. L'indicateur
151 <literal>"uniqueNan"</literal> est insensible aux minuscules/majuscules.
154 Pour un tableau de booléens, <literal>unique(…)</literal> sera utile principalement
155 avec les options "r" ou "c".
159 Les nombres complexes sont triés par modules croissants, puis par phases croissantes
164 <refsection role="examples">
165 <title>Exemples</title>
166 <para>Dédoublonnement de nombres :</para>
167 <programlisting role="example"><![CDATA[
168 M = int8([2 0 2 2 1 1 1 2 1 1 0 1 1 0 1 1
169 0 1 2 0 1 2 2 0 1 1 2 0 1 0 0 0
172 [uc, kmc] = unique(M, "c")
177 2 0 2 2 1 1 1 2 1 1 0 1 1 0 1 1
178 0 1 2 0 1 2 2 0 1 1 2 0 1 0 0 0
180 --> [u, km] = unique(M)
191 --> [uc, kmc] = unique(M, "c")
197 14. 2. 11. 12. 5. 6. 1. 3.
199 <para>Dédoublonnement de nombres complexes :</para>
200 <programlisting role="example"><![CDATA[
202 c = [1+i, 1-i, -i, i, -i, 1+i]
204 [uc, kc] = unique(c, "c")
207 --> c = [1+i, 1-i, -i, i, -i, 1+i]
209 1. + i 1. - i 0. - i 0. + i 0. - i 1. + i
211 --> [u, k] = unique(c)
213 0. - i 0. + i 1. - i 1. + i
217 --> [uc, kc] = unique(c, "c")
219 0. - i 0. + i 1. - i 1. + i
224 <para>Dédoublonnement de textes :</para>
225 <programlisting role="example"><![CDATA[
226 t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
227 "AA" "AB" "AA" "AA" "BB" "BB" "BB" "BA" "AB" "AB" "BB" "BB" "AB" "AB" "AA"
230 [u, kt, ku, nb] = unique(t(1,:))
231 [u, kt] = unique(t(1,:), "keepOrder") // ordre initial conservé
232 [uc, ktc, kuc, nb] = unique(t, "c")
233 [uc, ktc, kuc, nb] = unique(t, "c", "keepOrder") // ordre initial des colonnes conservé
234 [and(t(:,ktc)==uc), and(uc(:,kuc)==t) ]
237 --> t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
238 > "AA" "AB" "AA" "AA" "BB" "BB" "BB" "BA" "AB" "AB" "BB" "BB" "AB" "AB" "AA"
241 !BA BB AB BA AB BA AB AB BA AA AB BA BA BA AA !
242 !AA AB AA AA BB BB BB BA AB AB BB BB AB AB AA !
248 --> [u, kt, ku, nb] = unique(t(1,:))
258 --> [u, kt] = unique(t(1,:), "keepOrder") // ordre initial conservé
265 --> [uc, ktc, kuc, nb] = unique(t, "c")
267 !AA AA AB AB AB BA BA BA BB ! colonnes triées
268 !AA AB AA BA BB AA AB BB AB !
271 15. 10. 3. 8. 5. 1. 9. 6. 2.
274 1. 1. 1. 1. 3. 2. 3. 2. 1.
276 --> [uc, ktc, kuc, nb] = unique(t, "c", "keepOrder") // ordre initial des colonnes conservé
278 !BA BB AB AB BA AB BA AA AA !
279 !AA AB AA BB BB BA AB AB AA !
282 1. 2. 3. 5. 6. 8. 9. 10. 15.
285 2. 1. 1. 3. 2. 1. 3. 1. 1.
287 --> [and(t(:,ktc)==uc), and(uc(:,kuc)==t) ]
292 <para>Avec des valeurs Nan (et Inf). Option "uniqueNan" :</para>
293 <programlisting role="example"><![CDATA[
294 M = [2 2 %nan 1 2 0 1 %nan 0 %nan
295 1 0 1 %nan 0 %inf 0 1 %inf 1
297 [v, km, kv, n] = unique(M); v',n'
298 [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
300 [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
305 2. 2. Nan 1. 2. 0. 1. Nan 0. Nan
306 1. 0. 1. Nan 0. Inf 0. 1. Inf 1.
308 --> [v, km, kv, n] = unique(M); v',n'
310 0. 1. 2. Inf Nan Nan Nan Nan
313 5. 6. 3. 2. 1. 1. 1. 1.
315 --> [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
324 0. 1. 1. 2. 2. Nan Nan Nan
325 Inf 0. Nan 0. 1. 1. 1. 1.
327 --> [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
339 <refsection role="see also">
340 <title>Voir aussi</title>
341 <simplelist type="inline">
343 <link linkend="members">members</link>
346 <link linkend="gsort">gsort</link>
349 <link linkend="vectorfind">vectorfind</link>
352 <link linkend="grep">grep</link>
355 <link linkend="union">union</link>
358 <link linkend="intersect">intersect</link>
362 <refsection role="history">
363 <title>Historique</title>
366 <revnumber>6.0.2</revnumber>
368 unique() peut maintenant être utilisée pour dédoublonner des nombres complexes.
372 <revnumber>6.1.0</revnumber>
376 Extension aux booléens.
379 Options "keepOrder" et "uniqueNan" ajoutées.
382 4ème résultat <literal>nb</literal> ajouté.
388 <revnumber>6.1.1</revnumber>
390 3ème résultat ku implémenté.