* Bugs 16337 16455 fixed: [..,..,ku] = unique(..) implemented
[scilab.git] / scilab / modules / elementary_functions / help / fr_FR / setoperations / unique.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
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
7  *
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.
14  *
15  -->
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">
20     <refnamediv>
21         <refname>unique</refname>
22         <refpurpose>extrait (et trie) les éléments distincts d'un vecteur, matrice, hypermatrice
23         </refpurpose>
24     </refnamediv>
25     <refsynopsisdiv>
26         <title>Séquence d'appel</title>
27         <synopsis>
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")
32         </synopsis>
33     </refsynopsisdiv>
34     <refsection role="parameters">
35         <title>Paramètres</title>
36         <variablelist>
37             <varlistentry>
38                 <term>M</term>
39                 <listitem>
40                     <para>
41                         vecteur, matrice, ou hypermatrice de booléens, de nombres, ou de textes.
42                     </para>
43                 </listitem>
44             </varlistentry>
45             <varlistentry>
46                 <term>orient</term>
47                 <listitem>
48                     <para>
49                         1 ou "r", 2 ou "c". Ne peut pas être utilisé si <varname>M</varname> est
50                         une hypermatrice.
51                     </para>
52                 </listitem>
53             </varlistentry>
54             <varlistentry>
55                 <term>U</term>
56                 <listitem>
57                     <para>
58                       <itemizedlist>
59                         <listitem>
60                             <para>
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
65                                 vecteur colonne.
66                             </para>
67                         </listitem>
68                         <listitem>
69                           Avec <varname>orient</varname>: Matrice de lignes ou de colonnes extraites
70                           de <varname>M</varname>, triées par ordre lexicographique croissant.
71                         </listitem>
72                       </itemizedlist>
73                     </para>
74                 </listitem>
75             </varlistentry>
76             <varlistentry>
77                 <term>km</term>
78                 <listitem>
79                     <para>
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>.
83                     </para>
84                     <para>
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.
88                     </para>
89                 </listitem>
90             </varlistentry>
91             <varlistentry>
92                 <term>ku</term>
93                 <listitem>
94                     Vecteur, matrice ou hypermatrice d'indices dans U, tel que, selon
95                     l'option <varname>orient</varname>
96                     <itemizedlist>
97                         <listitem>
98                             "*": <varname>ku</varname> est de taille size(M), avec <literal>U(ku) = M</literal>
99                         </listitem>
100                         <listitem>
101                             "r": <varname>ku</varname> est de taille [size(M,1), 1], avec <literal>U(ku,:) = M</literal>
102                         </listitem>
103                         <listitem>
104                             "c": <varname>ku</varname> est de taille [1, size(M,2)], avec <literal>U(:,ku) = M</literal>
105                         </listitem>
106                     </itemizedlist>
107                     <para/>
108                 </listitem>
109             </varlistentry>
110             <varlistentry>
111                 <term>nb</term>
112                 <listitem>
113                     <para>
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>.
117                     </para>
118                 </listitem>
119             </varlistentry>
120         </variablelist>
121     </refsection>
122     <refsection role="description">
123         <title>Description</title>
124         <para>
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.
128         </para>
129         <para>
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.
133         </para>
134         <para>
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.
138         </para>
139         <para>
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.
144         </para>
145         <para>
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&lt;>%nan</literal> est vrai, à moins d'utiliser
150             <literal>"uniqueNan"</literal>. L'indicateur
151             <literal>"uniqueNan"</literal> est insensible aux minuscules/majuscules.
152         </para>
153         <para>
154             Pour un tableau de booléens, <literal>unique(…)</literal> sera utile principalement
155             avec les options "r" ou "c".
156         </para>
157         <para>
158             <note>
159                 Les nombres complexes sont triés par modules croissants, puis par phases croissantes
160                 sur [-π, π].
161             </note>
162         </para>
163     </refsection>
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
170           ])
171 [u, km] = unique(M)
172 [uc, kmc] = unique(M, "c")
173  ]]></programlisting>
174     <screen><![CDATA[
175 --> M
176  M =
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
179
180 --> [u, km] = unique(M)
181  u  =
182   0
183   1
184   2
185
186  km  =
187    2.
188    4.
189    1.
190
191 --> [uc, kmc] = unique(M, "c")
192  uc  =
193   0  0  0  1  1  1  2  2
194   0  1  2  0  1  2  0  2
195
196  kmc  =
197    14.   2.   11.   12.   5.   6.   1.   3.
198 ]]></screen>
199         <para>Dédoublonnement de nombres complexes :</para>
200         <programlisting role="example"><![CDATA[
201 i = %i;
202 c = [1+i, 1-i, -i, i, -i, 1+i]
203 [u, k] = unique(c)
204 [uc, kc] = unique(c, "c")
205  ]]></programlisting>
206     <screen><![CDATA[
207 --> c = [1+i, 1-i, -i, i, -i, 1+i]
208  c  =
209    1. + i    1. - i    0. - i    0. + i    0. - i    1. + i
210
211 --> [u, k] = unique(c)
212  u  =
213    0. - i    0. + i    1. - i    1. + i
214  k  =
215    3.   4.   2.   1.
216
217 --> [uc, kc] = unique(c, "c")
218  uc  =
219    0. - i    0. + i    1. - i    1. + i
220  kc  =
221    3.   4.   2.   1.
222 ]]></screen>
223
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"
228     ]
229 u = unique(t)'
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) ]
235  ]]></programlisting>
236     <screen><![CDATA[
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"
239   >     ]
240  t  =
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  !
243
244 --> u = unique(t)'
245  u  =
246 !AA  AB  BA  BB  !
247
248 --> [u, kt, ku, nb] = unique(t(1,:))
249  u  =
250 !AA  AB  BA  BB  !
251
252  kt  =
253    10.   3.   1.   2.
254
255  nb  =
256    2.   5.   7.   1.
257
258 --> [u, kt] = unique(t(1,:), "keepOrder")  // ordre initial conservé
259  u  =
260 !BA  BB  AB  AA  !
261
262  kt  =
263    1.   2.   3.   10.
264
265 --> [uc, ktc, kuc, nb] = unique(t, "c")
266  uc  =
267 !AA  AA  AB  AB  AB  BA  BA  BA  BB  !             colonnes triées
268 !AA  AB  AA  BA  BB  AA  AB  BB  AB  !
269
270  ktc  =
271    15.   10.   3.   8.   5.   1.   9.   6.   2.
272
273  nb  =
274    1.   1.   1.   1.   3.   2.   3.   2.   1.
275
276 --> [uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // ordre initial des colonnes conservé
277  uc  =
278 !BA  BB  AB  AB  BA  AB  BA  AA  AA  !
279 !AA  AB  AA  BB  BB  BA  AB  AB  AA  !
280
281  ktc  =
282    1.   2.   3.   5.   6.   8.   9.   10.   15.
283
284  nb  =
285    2.   1.   1.   3.   2.   1.   3.   1.   1.
286
287 --> [and(t(:,ktc)==uc), and(uc(:,kuc)==t) ]
288  ans  =
289   T  T
290 ]]></screen>
291         <para/>
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
296     ];
297 [v, km, kv, n] = unique(M); v',n'
298 [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
299 unique(M, "c")
300 [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
301  ]]></programlisting>
302     <screen><![CDATA[
303 --> M
304  M  =
305    2.   2.   Nan   1.    2.   0.    1.   Nan   0.    Nan
306    1.   0.   1.    Nan   0.   Inf   0.   1.    Inf   1.
307
308 --> [v, km, kv, n] = unique(M); v',n'
309  ans  =
310    0.   1.   2.   Inf   Nan   Nan   Nan   Nan
311
312  ans  =
313    5.   6.   3.   2.   1.   1.   1.   1.
314
315 --> [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
316  ans  =
317    0.   1.   2.   Inf   Nan
318
319  ans  =
320    5.   6.   3.   2.   4.
321
322 --> unique(M, "c")
323  ans  =
324    0.    1.   1.    2.   2.   Nan   Nan   Nan
325    Inf   0.   Nan   0.   1.   1.    1.    1.
326
327 --> [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
328  v  =
329    0.    1.   1.    2.   2.   Nan
330    Inf   0.   Nan   0.   1.   1.
331
332  kmc  =
333    6.   7.   4.   2.   1.   3.
334
335  n  =
336    2.   1.   1.   2.   1.   3.
337 ]]></screen>
338     </refsection>
339     <refsection role="see also">
340         <title>Voir aussi</title>
341         <simplelist type="inline">
342             <member>
343                 <link linkend="members">members</link>
344             </member>
345             <member>
346                 <link linkend="gsort">gsort</link>
347             </member>
348             <member>
349                 <link linkend="vectorfind">vectorfind</link>
350             </member>
351             <member>
352                 <link linkend="grep">grep</link>
353             </member>
354             <member>
355                 <link linkend="union">union</link>
356             </member>
357             <member>
358                 <link linkend="intersect">intersect</link>
359             </member>
360         </simplelist>
361     </refsection>
362     <refsection role="history">
363         <title>Historique</title>
364         <revhistory>
365             <revision>
366                 <revnumber>6.0.2</revnumber>
367                 <revdescription>
368                     unique() peut maintenant être utilisée pour dédoublonner des nombres complexes.
369                 </revdescription>
370             </revision>
371             <revision>
372                 <revnumber>6.1.0</revnumber>
373                 <revdescription>
374                     <itemizedlist>
375                         <listitem>
376                             Extension aux booléens.
377                         </listitem>
378                         <listitem>
379                             Options "keepOrder" et "uniqueNan" ajoutées.
380                         </listitem>
381                         <listitem>
382                             4ème résultat <literal>nb</literal> ajouté.
383                         </listitem>
384                     </itemizedlist>
385                 </revdescription>
386             </revision>
387             <revision>
388                 <revnumber>6.1.1</revnumber>
389                 <revdescription>
390                     3ème résultat ku implémenté.
391                 </revdescription>
392             </revision>
393         </revhistory>
394     </refsection>
395 </refentry>