unique(): push nb output in 4th position 36/21336/2
Samuel GOUGEON [Sun, 16 Feb 2020 22:34:38 +0000 (23:34 +0100)]
Change-Id: I54d337db802c2ebc64cc488385391c145114487f

scilab/modules/elementary_functions/help/en_US/setoperations/unique.xml
scilab/modules/elementary_functions/help/fr_FR/setoperations/unique.xml
scilab/modules/elementary_functions/help/ja_JP/setoperations/unique.xml
scilab/modules/elementary_functions/help/pt_BR/setoperations/unique.xml
scilab/modules/elementary_functions/help/ru_RU/setoperations/unique.xml
scilab/modules/elementary_functions/macros/unique.sci
scilab/modules/elementary_functions/tests/unit_tests/unique.tst

index 5a0b497..22c16b7 100644 (file)
     <refsynopsisdiv>
         <title>Syntax</title>
         <synopsis>
-            [N, k, nb] = unique(M)
-            [N, k, nb] = unique(M, orient)
-            [N, k, nb] = unique(.., "keepOrder")
-            [N, k, nb] = unique(.., "uniqueNan")
+            [N, km, kn, nb] = unique(M)
+            [N, km, kn, nb] = unique(M, orient)
+            [N, km, kn, nb] = unique(.., "keepOrder")
+            [N, km, kn, nb] = unique(.., "uniqueNan")
         </synopsis>
     </refsynopsisdiv>
     <refsection role="parameters">
             <varlistentry>
                 <term>M</term>
                 <listitem>
-                    <para>vector, matrix, or hypermatrix of numbers or of strings.</para>
+                    vector, matrix, or hypermatrix of numbers or of strings.
+                    <para/>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>orient</term>
                 <listitem>
-                    <para>
-                        flag with possible values : 1 or "r", 2 or "c". It can't be used if
-                        <varname>M</varname> is an hypermatrix.
-                    </para>
+                    flag with possible values : 1 or "r", 2 or "c". It can't be used if
+                    <varname>M</varname> is an hypermatrix.
+                    <para/>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>N</term>
                 <listitem>
-                    <para>
-                      <itemizedlist>
-                        <listitem>
-                            <para>
-                                If <varname>orient</varname> is not used: Vector of extracted
-                                <varname>M</varname> components sorted in ascending order.
-                                If <varname>M</varname> is a row vector, <varname>N</varname> is
-                                also a row vector. In all other <varname>M</varname> cases,
-                                <varname>N</varname> is a matrix or a column vector.
-                            </para>
-                        </listitem>
-                        <listitem>
-                          If <varname>orient</varname> is used: Matrix of extracted
-                          <varname>M</varname> rows or columns, sorted in lexicographic ascending order.
-                        </listitem>
-                      </itemizedlist>
-                    </para>
+                  <itemizedlist>
+                    <listitem>
+                        If <varname>orient</varname> is not used: Vector of extracted
+                        <varname>M</varname> components sorted in ascending order.
+                        If <varname>M</varname> is a row vector, <varname>N</varname> is
+                        also a row vector. In all other <varname>M</varname> cases,
+                        <varname>N</varname> is a matrix or a column vector.
+                        <para/>
+                    </listitem>
+                    <listitem>
+                      If <varname>orient</varname> is used: Matrix of extracted
+                      <varname>M</varname> rows or columns, sorted in lexicographic ascending order.
+                    </listitem>
+                  </itemizedlist>
+                  <para/>
                 </listitem>
             </varlistentry>
             <varlistentry>
-                <term>k</term>
+                <term>km</term>
                 <listitem>
-                    <para>
-                      Vector of indices of first encountered occurrences, such that
-                      <literal>N(i) = M(k(i))</literal> or <literal>N(i,:) = M(k(i),:)</literal>
-                      or <literal>N(:,i) = M(:,k(i))</literal>.
-                    </para>
-                    <para>
-                        <varname>k</varname> is a row if <varname>M</varname> is a row or if
-                        <literal>orient="c"</literal> is used. Otherwise it's a column.
-                    </para>
+                    Vector of indices of first encountered occurrences, such that
+                    <literal>N(i) = M(km(i))</literal> or <literal>N(i,:) = M(km(i),:)</literal>
+                    or <literal>N(:,i) = M(:,km(i))</literal>.
+                    <para/>
+                    <varname>km</varname> is a row if <varname>M</varname> is a row or if
+                    <literal>orient="c"</literal> is used. Otherwise it's a column.
+                    <para/>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>kn</term>
+                <listitem>
+                    Not yet implemented.
+                    Vector of indices of first encountered occurrences, such that
+                    <literal>M(i) = N(kn(i))</literal> or <literal>M(i,:) = N(kn(i),:)</literal>
+                    or <literal>M(:,i) = N(:,kn(i))</literal>.
+                    <para/>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>nb</term>
                 <listitem>
-                    <para>
-                      Vector of integers > 0, with the same <varname>k</varname> shape:
-                      Numbers of occurrences in <varname>M</varname> of respective unduplicated
-                      entities (components, rows, columns) returned in <varname>N</varname>.
-                    </para>
+                    Vector of integers > 0, with the same <varname>km</varname> shape:
+                    Numbers of occurrences in <varname>M</varname> of respective unduplicated
+                    entities (components, rows, columns) returned in <varname>N</varname>.
+                    <para/>
                 </listitem>
             </varlistentry>
         </variablelist>
 M = int8([2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
           0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
           ])
-[u, k] = unique(M)
-[uc, kc] = unique(M, "c")
-
-// Get unduplicated columns in initial order:
-M(:, gsort(kc,"g","i"))
+[u, km] = unique(M)
+[uc, kmc] = unique(M, "c")
  ]]></programlisting>
     <screen><![CDATA[
 --> M
@@ -144,30 +146,24 @@ M(:, gsort(kc,"g","i"))
   2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
   0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
 
---> [u, k] = unique(M)
+--> [u, km] = unique(M)
  u  =
   0
   1
   2
 
- k  =
+ km  =
    2.
    4.
    1.
 
---> [uc, kc] = unique(M, "c")
+--> [uc, kmc] = unique(M, "c")
  uc  =
   0  0  0  1  1  1  2  2
   0  1  2  0  1  2  0  2
 
- kc  =
+ kmc  =
    14.   2.   11.   12.   5.   6.   1.   3.
-
---> // Get unduplicated columns in initial order:
---> M(:, gsort(kc,"g","i"))
- ans  =
-  2  0  2  1  1  0  1  0
-  0  1  2  1  2  2  0  0
 ]]></screen>
         <para/>
         <para>With complex numbers:</para>
@@ -196,10 +192,10 @@ t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
      "AA" "AB" "AA" "AA" "BB" "BB" "BB" "BA" "AB" "AB" "BB" "BB" "AB" "AB" "AA"
     ]
 u = unique(t)'
-[u, k, nb] = unique(t(1,:))
-[u, k] = unique(t(1,:), "keepOrder")  // Keeping the original order of row#1 elements
-[uc, kc, nb] = unique(t, "c")
-[uc, kc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order of columns
+[u, kt, ku, nb] = unique(t(1,:))
+[u, kt] = unique(t(1,:), "keepOrder")  // Keeping the original order of row#1 elements
+[uc, ktc, kuc, nb] = unique(t, "c")
+[uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order of columns
  ]]></programlisting>
     <screen><![CDATA[
 --> t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
@@ -213,40 +209,40 @@ u = unique(t)'
  u  =
 !AA  AB  BA  BB  !
 
---> [u, k, nb] = unique(t(1,:))
+--> [u, kt, ku, nb] = unique(t(1,:)); u, kt, nb
  u  =
 !AA  AB  BA  BB  !
 
- k  =
+ kt  =
    10.   3.   1.   2.
 
  nb  =
    2.   5.   7.   1.
 
---> [u, k] = unique(t(1,:), "keepOrder")  // Keeping the original order
+--> [u, kt] = unique(t(1,:), "keepOrder")  // Keeping the original order
  u  =
 !BA  BB  AB  AA  !
 
- k  =
+ kt  =
    1.   2.   3.   10.
 
---> [uc, kc, nb] = unique(t, "c")
- nb  =
-   1.   1.   1.   1.   3.   2.   3.   2.   1.
-
- kc  =
-   15.   10.   3.   8.   5.   1.   9.   6.   2.
-
+--> [uc, ktc, kuc, nb] = unique(t, "c")
  uc  =
 !AA  AA  AB  AB  AB  BA  BA  BA  BB  !             Sorted columns
 !AA  AB  AA  BA  BB  AA  AB  BB  AB  !
 
---> [uc, kc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order
+ ktc  =
+   15.   10.   3.   8.   5.   1.   9.   6.   2.
+
+ nb  =
+   1.   1.   1.   1.   3.   2.   3.   2.   1.
+
+--> [uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order
  uc  =
 !BA  BB  AB  AB  BA  AB  BA  AA  AA  !
 !AA  AB  AA  BB  BB  BA  AB  AB  AA  !
 
- kc  =
+ ktc  =
    1.   2.   3.   5.   6.   8.   9.   10.   15.
 
  nb  =
@@ -258,10 +254,10 @@ u = unique(t)'
 M = [2  2  %nan  1     2  0     1  %nan  0    %nan
      1  0  1     %nan  0  %inf  0  1     %inf 1
     ];
-[v,k,n] = unique(M); v',n'
-[v,k,n] = unique(M, "uniqueNan"); v',n'
+[v, km, kv, n] = unique(M); v',n'
+[v, km, kv, n] = unique(M, "uniqueNan"); v',n'
 unique(M, "c")
-[v, k, n] = unique(M, "c", "uniqueNan")
+[v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
  ]]></programlisting>
     <screen><![CDATA[
 --> M
@@ -269,14 +265,14 @@ unique(M, "c")
    2.   2.   Nan   1.    2.   0.    1.   Nan   0.    Nan
    1.   0.   1.    Nan   0.   Inf   0.   1.    Inf   1.
 
---> [v,k,n] = unique(M); v',n'
+--> [v, km, kv, n] = unique(M); v',n'
  ans  =
    0.   1.   2.   Inf   Nan   Nan   Nan   Nan
 
  ans  =
    5.   6.   3.   2.   1.   1.   1.   1.
 
---> [v,k,n] = unique(M, "uniqueNan"); v',n'
+--> [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
  ans  =
    0.   1.   2.   Inf   Nan
 
@@ -288,12 +284,12 @@ unique(M, "c")
    0.    1.   1.    2.   2.   Nan   Nan   Nan
    Inf   0.   Nan   0.   1.   1.    1.    1.
 
---> [v, k, n] = unique(M, "c", "uniqueNan")
+--> [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
  v  =
    0.    1.   1.    2.   2.   Nan
    Inf   0.   Nan   0.   1.   1.
 
- k  =
+ kmc  =
    6.   7.   4.   2.   1.   3.
 
  n  =
@@ -340,7 +336,7 @@ unique(M, "c")
                             "keepOrder" and "uniqueNan" options introduced.
                         </listitem>
                         <listitem>
-                            Third output argument <literal>nb</literal> introduced.
+                            Fourth output argument <literal>nb</literal> introduced.
                         </listitem>
                     </itemizedlist>
                 </revdescription>
index 746ead1..4a5ab3f 100644 (file)
     <refsynopsisdiv>
         <title>Séquence d'appel</title>
         <synopsis>
-            [N, k, nb] = unique(M)
-            [N, k, nb] = unique(M, orient)
-            [N, k, nb] = unique(.., "keepOrder")
-            [N, k, nb] = unique(.., "uniqueNan")
+            [N, km, kn, nb] = unique(M)
+            [N, km, kn, nb] = unique(M, orient)
+            [N, km, kn, nb] = unique(.., "keepOrder")
+            [N, km, kn, nb] = unique(.., "uniqueNan")
         </synopsis>
     </refsynopsisdiv>
     <refsection role="parameters">
                 </listitem>
             </varlistentry>
             <varlistentry>
-                <term>k</term>
+                <term>km</term>
                 <listitem>
                     <para>
                       Indices des éléments, lignes ou colonnes extraits, tels que
-                      <literal>N(i) = M(k(i))</literal> ou <literal>N(i,:) = M(k(i),:)</literal>
-                      ou <literal>N(:,i) = M(:,k(i))</literal>.
+                      <literal>N(i) = M(km(i))</literal> ou <literal>N(i,:) = M(km(i),:)</literal>
+                      ou <literal>N(:,i) = M(:,km(i))</literal>.
                     </para>
                     <para>
-                        <varname>k</varname> est un vecteur ligne si <varname>M</varname>
+                        <varname>km</varname> est un vecteur ligne si <varname>M</varname>
                         l'est aussi ou si <literal>orient="c"</literal> est utilisé.
-                        Sinon <varname>k</varname> est en colonne.
+                        Sinon <varname>km</varname> est en colonne.
                     </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
+                <term>kn</term>
+                <listitem>
+                    Not yet implemented.
+                    Vector of indices of first encountered occurrences, such that
+                    <literal>M(i) = N(kn(i))</literal> or <literal>M(i,:) = N(kn(i),:)</literal>
+                    or <literal>M(:,i) = N(:,kn(i))</literal>.
+                    <para/>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
                 <term>nb</term>
                 <listitem>
                     <para>
-                      Vecteur d'entiers > 0, au format de <varname>k</varname> :
+                      Vecteur d'entiers > 0, au format de <varname>km</varname> :
                       nombres d'exemplaires dans <varname>M</varname> de chaque entité
                       (élément, ligne, colonne) retournée dans <varname>N</varname>.
                     </para>
 M = int8([2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
           0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
           ])
-[u, k] = unique(M)
-[uc, kc] = unique(M, "c")
-
-// Obtenir les colonnes dédoublonnées dans leur ordre initial :
-M(:, gsort(kc,"g","i"))
+[u, km] = unique(M)
+[uc, kmc] = unique(M, "c")
  ]]></programlisting>
     <screen><![CDATA[
 --> M
@@ -151,30 +158,24 @@ M(:, gsort(kc,"g","i"))
   2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
   0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
 
---> [u, k] = unique(M)
+--> [u, km] = unique(M)
  u  =
   0
   1
   2
 
- k  =
+ km  =
    2.
    4.
    1.
 
---> [uc, kc] = unique(M, "c")
+--> [uc, kmc] = unique(M, "c")
  uc  =
   0  0  0  1  1  1  2  2
   0  1  2  0  1  2  0  2
 
- kc  =
+ kmc  =
    14.   2.   11.   12.   5.   6.   1.   3.
-
---> // Obtenir les colonnes dédoublonnées dans leur ordre initial :
---> M(:, gsort(kc,"g","i"))
- ans  =
-  2  0  2  1  1  0  1  0
-  0  1  2  1  2  2  0  0
 ]]></screen>
         <para>Dédoublonnement de nombres complexes :</para>
         <programlisting role="example"><![CDATA[
@@ -202,10 +203,10 @@ t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
      "AA" "AB" "AA" "AA" "BB" "BB" "BB" "BA" "AB" "AB" "BB" "BB" "AB" "AB" "AA"
     ]
 u = unique(t)'
-[u, k, nb] = unique(t(1,:))
-[u, k] = unique(t(1,:), "keepOrder")        // ordre initial conservé
-[uc, kc, nb] = unique(t, "c")
-[uc, kc, nb] = unique(t, "c", "keepOrder")  // ordre initial des colonnes conservé
+[u, kt, ku, nb] = unique(t(1,:))
+[u, kt] = unique(t(1,:), "keepOrder")        // ordre initial conservé
+[uc, ktc, kuc, nb] = unique(t, "c")
+[uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // ordre initial des colonnes conservé
  ]]></programlisting>
     <screen><![CDATA[
 --> t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
@@ -219,40 +220,40 @@ u = unique(t)'
  u  =
 !AA  AB  BA  BB  !
 
---> [u, k, nb] = unique(t(1,:))
+--> [u, kt, ku, nb] = unique(t(1,:))
  u  =
 !AA  AB  BA  BB  !
 
- k  =
+ kt  =
    10.   3.   1.   2.
 
  nb  =
    2.   5.   7.   1.
 
---> [u, k] = unique(t(1,:), "keepOrder")  // ordre initial conservé
+--> [u, kt] = unique(t(1,:), "keepOrder")  // ordre initial conservé
  u  =
 !BA  BB  AB  AA  !
 
- k  =
+ kt  =
    1.   2.   3.   10.
 
---> [uc, kc, nb] = unique(t, "c")
- nb  =
-   1.   1.   1.   1.   3.   2.   3.   2.   1.
-
- kc  =
-   15.   10.   3.   8.   5.   1.   9.   6.   2.
-
+--> [uc, ktc, kuc, nb] = unique(t, "c")
  uc  =
 !AA  AA  AB  AB  AB  BA  BA  BA  BB  !             colonnes triées
 !AA  AB  AA  BA  BB  AA  AB  BB  AB  !
 
---> [uc, kc, nb] = unique(t, "c", "keepOrder")  // ordre initial des colonnes conservé
+ ktc  =
+   15.   10.   3.   8.   5.   1.   9.   6.   2.
+
+ nb  =
+   1.   1.   1.   1.   3.   2.   3.   2.   1.
+
+--> [uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // ordre initial des colonnes conservé
  uc  =
 !BA  BB  AB  AB  BA  AB  BA  AA  AA  !
 !AA  AB  AA  BB  BB  BA  AB  AB  AA  !
 
- kc  =
+ ktc  =
    1.   2.   3.   5.   6.   8.   9.   10.   15.
 
  nb  =
@@ -264,10 +265,10 @@ u = unique(t)'
 M = [2  2  %nan  1     2  0     1  %nan  0    %nan
      1  0  1     %nan  0  %inf  0  1     %inf 1
     ];
-[v,k,n] = unique(M); v',n'
-[v,k,n] = unique(M, "uniqueNan"); v',n'
+[v, km, kv, n] = unique(M); v',n'
+[v, km, kv, n] = unique(M, "uniqueNan"); v',n'
 unique(M, "c")
-[v, k, n] = unique(M, "c", "uniqueNan")
+[v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
  ]]></programlisting>
     <screen><![CDATA[
 --> M
@@ -275,14 +276,14 @@ unique(M, "c")
    2.   2.   Nan   1.    2.   0.    1.   Nan   0.    Nan
    1.   0.   1.    Nan   0.   Inf   0.   1.    Inf   1.
 
---> [v,k,n] = unique(M); v',n'
+--> [v, km, kv, n] = unique(M); v',n'
  ans  =
    0.   1.   2.   Inf   Nan   Nan   Nan   Nan
 
  ans  =
    5.   6.   3.   2.   1.   1.   1.   1.
 
---> [v,k,n] = unique(M, "uniqueNan"); v',n'
+--> [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
  ans  =
    0.   1.   2.   Inf   Nan
 
@@ -294,12 +295,12 @@ unique(M, "c")
    0.    1.   1.    2.   2.   Nan   Nan   Nan
    Inf   0.   Nan   0.   1.   1.    1.    1.
 
---> [v, k, n] = unique(M, "c", "uniqueNan")
+--> [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
  v  =
    0.    1.   1.    2.   2.   Nan
    Inf   0.   Nan   0.   1.   1.
 
- k  =
+ kmc  =
    6.   7.   4.   2.   1.   3.
 
  n  =
@@ -346,7 +347,7 @@ unique(M, "c")
                             Options "keepOrder" et "uniqueNan" ajoutées.
                         </listitem>
                         <listitem>
-                            3ème résultat <literal>nb</literal> ajouté.
+                            4ème résultat <literal>nb</literal> ajouté.
                         </listitem>
                     </itemizedlist>
                 </revdescription>
index a8398ac..f0145d3 100644 (file)
     <refsynopsisdiv>
         <title>呼び出し手順</title>
         <synopsis>
-            [N, k, nb] = unique(M)
-            [N, k, nb] = unique(M, orient)
-            [N, k, nb] = unique(.., "keepOrder")
-            [N, k, nb] = unique(.., "uniqueNan")
+            [N, km, kn, nb] = unique(M)
+            [N, km, kn, nb] = unique(M, orient)
+            [N, km, kn, nb] = unique(.., "keepOrder")
+            [N, km, kn, nb] = unique(.., "uniqueNan")
         </synopsis>
     </refsynopsisdiv>
     <refsection role="parameters">
                 </listitem>
             </varlistentry>
             <varlistentry>
+                <term>kn</term>
+                <listitem>
+                    Not yet implemented.
+                    Vector of indices of first encountered occurrences, such that
+                    <literal>M(i) = N(kn(i))</literal> or <literal>M(i,:) = N(kn(i),:)</literal>
+                    or <literal>M(:,i) = N(:,kn(i))</literal>.
+                    <para/>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
                 <term>nb</term>
                 <listitem>
                     <para>
 M = int8([2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
           0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
           ])
-[u, k] = unique(M)
-[uc, kc] = unique(M, "c")
-
-// Get unduplicated columns in initial order:
-M(:, gsort(kc,"g","i"))
+[u, km] = unique(M)
+[uc, kmc] = unique(M, "c")
  ]]></programlisting>
     <screen><![CDATA[
 --> M
@@ -146,30 +153,24 @@ M(:, gsort(kc,"g","i"))
   2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
   0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
 
---> [u, k] = unique(M)
+--> [u, km] = unique(M)
  u  =
   0
   1
   2
 
- k  =
+ km  =
    2.
    4.
    1.
 
---> [uc, kc] = unique(M, "c")
+--> [uc, kmc] = unique(M, "c")
  uc  =
   0  0  0  1  1  1  2  2
   0  1  2  0  1  2  0  2
 
- kc  =
+ kmc  =
    14.   2.   11.   12.   5.   6.   1.   3.
-
---> // Get unduplicated columns in initial order:
---> M(:, gsort(kc,"g","i"))
- ans  =
-  2  0  2  1  1  0  1  0
-  0  1  2  1  2  2  0  0
 ]]></screen>
         <para>With complex numbers:</para>
         <programlisting role="example"><![CDATA[
@@ -197,10 +198,10 @@ t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
      "AA" "AB" "AA" "AA" "BB" "BB" "BB" "BA" "AB" "AB" "BB" "BB" "AB" "AB" "AA"
     ]
 u = unique(t)'
-[u, k, nb] = unique(t(1,:))
-[u, k] = unique(t(1,:), "keepOrder")  // Keeping the original order of row#1 elements
-[uc, kc, nb] = unique(t, "c")
-[uc, kc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order of columns
+[u, kt, nb] = unique(t(1,:))
+[u, kt] = unique(t(1,:), "keepOrder")  // Keeping the original order of row#1 elements
+[uc, ktc, kuc, nb] = unique(t, "c")
+[uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order of columns
  ]]></programlisting>
     <screen><![CDATA[
 --> t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
@@ -214,34 +215,34 @@ u = unique(t)'
  u  =
 !AA  AB  BA  BB  !
 
---> [u, k, nb] = unique(t(1,:))
+--> [u, kt, ku, nb] = unique(t(1,:))
  u  =
 !AA  AB  BA  BB  !
 
- k  =
+ kt  =
    10.   3.   1.   2.
 
  nb  =
    2.   5.   7.   1.
 
---> [u, k] = unique(t(1,:), "keepOrder")  // Keeping the original order
+--> [u, kt] = unique(t(1,:), "keepOrder")  // Keeping the original order
  u  =
 !BA  BB  AB  AA  !
 
- k  =
+ kt  =
    1.   2.   3.   10.
 
---> [uc, kc, nb] = unique(t, "c")
- nb  =
-   1.   1.   1.   1.   3.   2.   3.   2.   1.
-
- kc  =
-   15.   10.   3.   8.   5.   1.   9.   6.   2.
-
+--> [uc, ktc, kuc, nb] = unique(t, "c")
  uc  =
 !AA  AA  AB  AB  AB  BA  BA  BA  BB  !             Sorted columns
 !AA  AB  AA  BA  BB  AA  AB  BB  AB  !
 
+ ktc  =
+   15.   10.   3.   8.   5.   1.   9.   6.   2.
+
+ nb  =
+   1.   1.   1.   1.   3.   2.   3.   2.   1.
+
 --> [uc, kc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order
  uc  =
 !BA  BB  AB  AB  BA  AB  BA  AA  AA  !
@@ -259,10 +260,10 @@ u = unique(t)'
 M = [2  2  %nan  1     2  0     1  %nan  0    %nan
      1  0  1     %nan  0  %inf  0  1     %inf 1
     ];
-[v,k,n] = unique(M); v',n'
-[v,k,n] = unique(M, "uniqueNan"); v',n'
+[v, km, kv, n] = unique(M); v',n'
+[v, km, kv, n] = unique(M, "uniqueNan"); v',n'
 unique(M, "c")
-[v, k, n] = unique(M, "c", "uniqueNan")
+[v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
  ]]></programlisting>
     <screen><![CDATA[
 --> M
@@ -270,14 +271,14 @@ unique(M, "c")
    2.   2.   Nan   1.    2.   0.    1.   Nan   0.    Nan
    1.   0.   1.    Nan   0.   Inf   0.   1.    Inf   1.
 
---> [v,k,n] = unique(M); v',n'
+--> [v, km, kv, n] = unique(M); v',n'
  ans  =
    0.   1.   2.   Inf   Nan   Nan   Nan   Nan
 
  ans  =
    5.   6.   3.   2.   1.   1.   1.   1.
 
---> [v,k,n] = unique(M, "uniqueNan"); v',n'
+--> [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
  ans  =
    0.   1.   2.   Inf   Nan
 
@@ -289,12 +290,12 @@ unique(M, "c")
    0.    1.   1.    2.   2.   Nan   Nan   Nan
    Inf   0.   Nan   0.   1.   1.    1.    1.
 
---> [v, k, n] = unique(M, "c", "uniqueNan")
+--> [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
  v  =
    0.    1.   1.    2.   2.   Nan
    Inf   0.   Nan   0.   1.   1.
 
- k  =
+ kmc  =
    6.   7.   4.   2.   1.   3.
 
  n  =
@@ -341,7 +342,7 @@ unique(M, "c")
                             "keepOrder" and "uniqueNan" options introduced.
                         </listitem>
                         <listitem>
-                            Third output argument <literal>nb</literal> introduced.
+                            Fourth output argument <literal>nb</literal> introduced.
                         </listitem>
                     </itemizedlist>
                 </revdescription>
index a8d164a..04b6d79 100644 (file)
     <refsynopsisdiv>
         <title>Seqüência de Chamamento</title>
         <synopsis>
-            [N, k, nb] = unique(M)
-            [N, k, nb] = unique(M, orient)
-            [N, k, nb] = unique(.., "keepOrder")
-            [N, k, nb] = unique(.., "uniqueNan")
+            [N, km, kn, nb] = unique(M)
+            [N, km, kn, nb] = unique(M, orient)
+            [N, km, kn, nb] = unique(.., "keepOrder")
+            [N, km, kn, nb] = unique(.., "uniqueNan")
         </synopsis>
     </refsynopsisdiv>
     <refsection role="parameters">
                 </listitem>
             </varlistentry>
             <varlistentry>
+                <term>kn</term>
+                <listitem>
+                    Not yet implemented.
+                    Vector of indices of first encountered occurrences, such that
+                    <literal>M(i) = N(kn(i))</literal> or <literal>M(i,:) = N(kn(i),:)</literal>
+                    or <literal>M(:,i) = N(:,kn(i))</literal>.
+                    <para/>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
                 <term>nb</term>
                 <listitem>
                     <para>
 M = int8([2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
           0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
           ])
-[u, k] = unique(M)
-[uc, kc] = unique(M, "c")
-
-// Get unduplicated columns in initial order:
-M(:, gsort(kc,"g","i"))
+[u, km] = unique(M)
+[uc, kmc] = unique(M, "c")
  ]]></programlisting>
     <screen><![CDATA[
 --> M
@@ -144,30 +151,24 @@ M(:, gsort(kc,"g","i"))
   2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
   0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
 
---> [u, k] = unique(M)
+--> [u, km] = unique(M)
  u  =
   0
   1
   2
 
- k  =
+ km  =
    2.
    4.
    1.
 
---> [uc, kc] = unique(M, "c")
+--> [uc, kmc] = unique(M, "c")
  uc  =
   0  0  0  1  1  1  2  2
   0  1  2  0  1  2  0  2
 
- kc  =
+ kmc  =
    14.   2.   11.   12.   5.   6.   1.   3.
-
---> // Get unduplicated columns in initial order:
---> M(:, gsort(kc,"g","i"))
- ans  =
-  2  0  2  1  1  0  1  0
-  0  1  2  1  2  2  0  0
 ]]></screen>
         <para>With complex numbers:</para>
         <programlisting role="example"><![CDATA[
@@ -195,10 +196,10 @@ t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
      "AA" "AB" "AA" "AA" "BB" "BB" "BB" "BA" "AB" "AB" "BB" "BB" "AB" "AB" "AA"
     ]
 u = unique(t)'
-[u, k, nb] = unique(t(1,:))
-[u, k] = unique(t(1,:), "keepOrder")  // Keeping the original order of row#1 elements
-[uc, kc, nb] = unique(t, "c")
-[uc, kc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order of columns
+[u, kt, ku, nb] = unique(t(1,:))
+[u, kt] = unique(t(1,:), "keepOrder")  // Keeping the original order of row#1 elements
+[uc, ktc, kuc, nb] = unique(t, "c")
+[uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order of columns
  ]]></programlisting>
     <screen><![CDATA[
 --> t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
@@ -212,40 +213,40 @@ u = unique(t)'
  u  =
 !AA  AB  BA  BB  !
 
---> [u, k, nb] = unique(t(1,:))
+--> [u, kt, ku, nb] = unique(t(1,:))
  u  =
 !AA  AB  BA  BB  !
 
- k  =
+ kt  =
    10.   3.   1.   2.
 
  nb  =
    2.   5.   7.   1.
 
---> [u, k] = unique(t(1,:), "keepOrder")  // Keeping the original order
+--> [u, kt] = unique(t(1,:), "keepOrder")  // Keeping the original order
  u  =
 !BA  BB  AB  AA  !
 
- k  =
+ kt  =
    1.   2.   3.   10.
 
---> [uc, kc, nb] = unique(t, "c")
- nb  =
-   1.   1.   1.   1.   3.   2.   3.   2.   1.
-
- kc  =
-   15.   10.   3.   8.   5.   1.   9.   6.   2.
-
+--> [uc, ktc, kuc, nb] = unique(t, "c")
  uc  =
 !AA  AA  AB  AB  AB  BA  BA  BA  BB  !             Sorted columns
 !AA  AB  AA  BA  BB  AA  AB  BB  AB  !
 
---> [uc, kc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order
+ ktc  =
+   15.   10.   3.   8.   5.   1.   9.   6.   2.
+
+ nb  =
+   1.   1.   1.   1.   3.   2.   3.   2.   1.
+
+--> [uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // Keeping the original order
  uc  =
 !BA  BB  AB  AB  BA  AB  BA  AA  AA  !
 !AA  AB  AA  BB  BB  BA  AB  AB  AA  !
 
- kc  =
+ ktc  =
    1.   2.   3.   5.   6.   8.   9.   10.   15.
 
  nb  =
@@ -257,10 +258,10 @@ u = unique(t)'
 M = [2  2  %nan  1     2  0     1  %nan  0    %nan
      1  0  1     %nan  0  %inf  0  1     %inf 1
     ];
-[v,k,n] = unique(M); v',n'
-[v,k,n] = unique(M, "uniqueNan"); v',n'
+[v, km, kv, n] = unique(M); v',n'
+[v, km, kv, n] = unique(M, "uniqueNan"); v',n'
 unique(M, "c")
-[v, k, n] = unique(M, "c", "uniqueNan")
+[v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
  ]]></programlisting>
     <screen><![CDATA[
 --> M
@@ -268,14 +269,14 @@ unique(M, "c")
    2.   2.   Nan   1.    2.   0.    1.   Nan   0.    Nan
    1.   0.   1.    Nan   0.   Inf   0.   1.    Inf   1.
 
---> [v,k,n] = unique(M); v',n'
+--> [v, km, kv, n] = unique(M); v',n'
  ans  =
    0.   1.   2.   Inf   Nan   Nan   Nan   Nan
 
  ans  =
    5.   6.   3.   2.   1.   1.   1.   1.
 
---> [v,k,n] = unique(M, "uniqueNan"); v',n'
+--> [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
  ans  =
    0.   1.   2.   Inf   Nan
 
@@ -287,12 +288,12 @@ unique(M, "c")
    0.    1.   1.    2.   2.   Nan   Nan   Nan
    Inf   0.   Nan   0.   1.   1.    1.    1.
 
---> [v, k, n] = unique(M, "c", "uniqueNan")
+--> [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
  v  =
    0.    1.   1.    2.   2.   Nan
    Inf   0.   Nan   0.   1.   1.
 
- k  =
+ kmc  =
    6.   7.   4.   2.   1.   3.
 
  n  =
@@ -339,7 +340,7 @@ unique(M, "c")
                             "keepOrder" and "uniqueNan" options introduced.
                         </listitem>
                         <listitem>
-                            Third output argument <literal>nb</literal> introduced.
+                            Fourth output argument <literal>nb</literal> introduced.
                         </listitem>
                     </itemizedlist>
                 </revdescription>
index a995870..b5a0dc0 100644 (file)
     <refsynopsisdiv>
         <title>Синтаксис</title>
         <synopsis>
-            [N, k, nb] = unique(M)
-            [N, k, nb] = unique(M, orient)
-            [N, k, nb] = unique(.., "keepOrder")
-            [N, k, nb] = unique(.., "uniqueNan")
+            [N, km, kn, nb] = unique(M)
+            [N, km, kn, nb] = unique(M, orient)
+            [N, km, kn, nb] = unique(.., "keepOrder")
+            [N, km, kn, nb] = unique(.., "uniqueNan")
         </synopsis>
     </refsynopsisdiv>
     <refsection role="parameters">
                 </listitem>
             </varlistentry>
             <varlistentry>
+                <term>kn</term>
+                <listitem>
+                    Not yet implemented.
+                    Vector of indices of first encountered occurrences, such that
+                    <literal>M(i) = N(kn(i))</literal> or <literal>M(i,:) = N(kn(i),:)</literal>
+                    or <literal>M(:,i) = N(:,kn(i))</literal>.
+                    <para/>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
                 <term>nb</term>
                 <listitem>
                     <para>
 M = int8([2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
           0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
           ])
-[u, k] = unique(M)
-[uc, kc] = unique(M, "c")
-
-// Получим недублированные столбцы в исходном порядке:
-M(:, gsort(kc,"g","i"))
+[u, km] = unique(M)
+[uc, kmc] = unique(M, "c")
  ]]></programlisting>
     <screen><![CDATA[
 --> M
@@ -142,30 +149,24 @@ M(:, gsort(kc,"g","i"))
   2  0  2  2  1  1  1  2  1  1  0  1  1  0  1  1
   0  1  2  0  1  2  2  0  1  1  2  0  1  0  0  0
 
---> [u, k] = unique(M)
+--> [u, km] = unique(M)
  u  =
   0
   1
   2
 
- k  =
+ km  =
    2.
    4.
    1.
 
---> [uc, kc] = unique(M, "c")
+--> [uc, kmc] = unique(M, "c")
  uc  =
   0  0  0  1  1  1  2  2
   0  1  2  0  1  2  0  2
 
- kc  =
+ kmc  =
    14.   2.   11.   12.   5.   6.   1.   3.
-
---> // Получим недублированные столбцы в исходном порядке:
---> M(:, gsort(kc,"g","i"))
- ans  =
-  2  0  2  1  1  0  1  0
-  0  1  2  1  2  2  0  0
 ]]></screen>
         <para>С комплексными числами:</para>
         <programlisting role="example"><![CDATA[
@@ -193,10 +194,10 @@ t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
      "AA" "AB" "AA" "AA" "BB" "BB" "BB" "BA" "AB" "AB" "BB" "BB" "AB" "AB" "AA"
     ]
 u = unique(t)'
-[u, k, nb] = unique(t(1,:))
-[u, k] = unique(t(1,:), "keepOrder")  // сохранение исходного порядка элементов строки №1
-[uc, kc, nb] = unique(t, "c")
-[uc, kc, nb] = unique(t, "c", "keepOrder")  // сохранение исходного порядка столбцов
+[u, kt, ku, nb] = unique(t(1,:))
+[u, kt] = unique(t(1,:), "keepOrder")  // сохранение исходного порядка элементов строки №1
+[uc, ktc, kuc, nb] = unique(t, "c")
+[uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // сохранение исходного порядка столбцов
  ]]></programlisting>
     <screen><![CDATA[
 --> t = ["BA" "BB" "AB" "BA" "AB" "BA" "AB" "AB" "BA" "AA" "AB" "BA" "BA" "BA" "AA"
@@ -210,40 +211,40 @@ u = unique(t)'
  u  =
 !AA  AB  BA  BB  !
 
---> [u, k, nb] = unique(t(1,:))
+--> [u, kt, ku, nb] = unique(t(1,:))
  u  =
 !AA  AB  BA  BB  !
 
- k  =
+ kt  =
    10.   3.   1.   2.
 
  nb  =
    2.   5.   7.   1.
 
---> [u, k] = unique(t(1,:), "keepOrder")  // сохранение исходного порядка
+--> [u, kt] = unique(t(1,:), "keepOrder")  // сохранение исходного порядка
  u  =
 !BA  BB  AB  AA  !
 
- k  =
+ kt  =
    1.   2.   3.   10.
 
---> [uc, kc, nb] = unique(t, "c")
- nb  =
-   1.   1.   1.   1.   3.   2.   3.   2.   1.
-
- kc  =
-   15.   10.   3.   8.   5.   1.   9.   6.   2.
-
+--> [uc, ktc, kuc, nb] = unique(t, "c")
  uc  =
 !AA  AA  AB  AB  AB  BA  BA  BA  BB  !             сортированные столбцы
 !AA  AB  AA  BA  BB  AA  AB  BB  AB  !
 
---> [uc, kc, nb] = unique(t, "c", "keepOrder")  // сохранение исходного порядка
+ ktc  =
+   15.   10.   3.   8.   5.   1.   9.   6.   2.
+
+ nb  =
+   1.   1.   1.   1.   3.   2.   3.   2.   1.
+
+--> [uc, ktc, kuc, nb] = unique(t, "c", "keepOrder")  // сохранение исходного порядка
  uc  =
 !BA  BB  AB  AB  BA  AB  BA  AA  AA  !
 !AA  AB  AA  BB  BB  BA  AB  AB  AA  !
 
- kc  =
+ ktc  =
    1.   2.   3.   5.   6.   8.   9.   10.   15.
 
  nb  =
@@ -255,10 +256,10 @@ u = unique(t)'
 M = [2  2  %nan  1     2  0     1  %nan  0    %nan
      1  0  1     %nan  0  %inf  0  1     %inf 1
     ];
-[v,k,n] = unique(M); v',n'
-[v,k,n] = unique(M, "uniqueNan"); v',n'
+[v, km, kv, n] = unique(M); v',n'
+[v, km, kv, n] = unique(M, "uniqueNan"); v',n'
 unique(M, "c")
-[v, k, n] = unique(M, "c", "uniqueNan")
+[v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
  ]]></programlisting>
     <screen><![CDATA[
 --> M
@@ -266,14 +267,14 @@ unique(M, "c")
    2.   2.   Nan   1.    2.   0.    1.   Nan   0.    Nan
    1.   0.   1.    Nan   0.   Inf   0.   1.    Inf   1.
 
---> [v,k,n] = unique(M); v',n'
+--> [v, km, kv, n] = unique(M); v',n'
  ans  =
    0.   1.   2.   Inf   Nan   Nan   Nan   Nan
 
  ans  =
    5.   6.   3.   2.   1.   1.   1.   1.
 
---> [v,k,n] = unique(M, "uniqueNan"); v',n'
+--> [v, km, kv, n] = unique(M, "uniqueNan"); v',n'
  ans  =
    0.   1.   2.   Inf   Nan
 
@@ -285,12 +286,12 @@ unique(M, "c")
    0.    1.   1.    2.   2.   Nan   Nan   Nan
    Inf   0.   Nan   0.   1.   1.    1.    1.
 
---> [v, k, n] = unique(M, "c", "uniqueNan")
+--> [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
  v  =
    0.    1.   1.    2.   2.   Nan
    Inf   0.   Nan   0.   1.   1.
 
- k  =
+ kmc  =
    6.   7.   4.   2.   1.   3.
 
  n  =
@@ -337,7 +338,7 @@ unique(M, "c")
                             Введены опции "keepOrder" и "uniqueNan".
                         </listitem>
                         <listitem>
-                            Введён третий выходной аргумент <literal>nb</literal>.
+                            Введён четвертый выходной аргумент <literal>nb</literal>.
                         </listitem>
                     </itemizedlist>
                 </revdescription>
index 45c3f70..db2d194 100644 (file)
@@ -10,7 +10,7 @@
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [x, k, nb] = unique(x, varargin)
+function [x, ki, ko, nb] = unique(x, varargin)
     // extract unique components of a vector
     // varargin : orient=1|2|"r"|"c", "uniqueNan", "keepOrder"
     //
@@ -24,7 +24,8 @@ function [x, k, nb] = unique(x, varargin)
     uniqueNan = %f
     orient = "*"
     newInf = [] // init Inf substitute in case of "uniqueNan" and or(x==%inf)
-    k = []
+    ki = []
+    ko = []
     nb = []
 
     // CHECKING INPUT ARGUMENTS
@@ -77,7 +78,7 @@ function [x, k, nb] = unique(x, varargin)
 
     sz = size(x);
     if size(x, orient)==1 then
-        k = 1
+        ki = 1
         return
     end
     if uniqueNan
@@ -89,7 +90,7 @@ function [x, k, nb] = unique(x, varargin)
     // [] trivial case
     // ---------------
     if isempty(x) then
-        return  // k, nb are already []. x is [] or sparse([])
+        return  // ki, nb are already []. x is [] or sparse([])
     end
 
     // PROCESSING complex numbers
@@ -104,13 +105,13 @@ function [x, k, nb] = unique(x, varargin)
                     if ~getK
                         x = unique(x,"r")
                     else
-                        [x, k, nb] = unique(x,"r")
+                        [x, ki, ko, nb] = unique(x,"r")
                     end
                     x = complex(x(:,1),x(:,2));
                     if sz(1)==1 // => put results in row
                         x = x.'
                         if getK
-                            k = k'
+                            ki = ki'
                             nb = nb'
                         end
                     end
@@ -119,7 +120,7 @@ function [x, k, nb] = unique(x, varargin)
                     if ~getK
                         x = unique(x,"r")
                     else
-                        [x, k, nb] = unique(x,"r")
+                        [x, ki, ko, nb] = unique(x,"r")
                     end
                     x = complex(x(:,1:sz(2)), x(:,sz(2)+1:$));
                 elseif orient=="c" | orient==2
@@ -127,7 +128,7 @@ function [x, k, nb] = unique(x, varargin)
                     if ~getK
                         x = unique(x,"c")
                     else
-                        [x, k, nb] = unique(x,"c")
+                        [x, ki, ko, nb] = unique(x,"c")
                     end
                     x = complex(x(1:sz(1),:), x(sz(1)+1:$,:));
                 end
@@ -135,7 +136,7 @@ function [x, k, nb] = unique(x, varargin)
                     x = uniqueProcessNan(x, newInf, "restoreNan")
                 end
                 if keepOrder
-                    [k, kk] = gsort(k,"g","i")
+                    [ki, kk] = gsort(ki,"g","i")
                     select orient
                     case "*"
                         x = x(kk)
@@ -155,7 +156,7 @@ function [x, k, nb] = unique(x, varargin)
     // -----------------------------------------
     if orient=="*" then
         if getK then
-            [x,k] = gsort(x,"g","i");
+            [x,ki] = gsort(x,"g","i");
             keq = x(2:$) == x(1:$-1);
             if argn(1)>2
                 nb = [0 find(~keq) size(x,"*")]
@@ -164,10 +165,10 @@ function [x, k, nb] = unique(x, varargin)
             keq = find(keq);
             if keq<>[] then keq = keq+1;end
             x(keq) = [];
-            k(keq) = [];
+            ki(keq) = [];
             if size(x,1)>1 | ndims(x)>2
                 x = x(:)
-                k = k(:)
+                ki = ki(:)
                 nb = nb(:)
             end
         else
@@ -177,7 +178,7 @@ function [x, k, nb] = unique(x, varargin)
         end
     elseif  orient==1|orient=="r" then
         if getK then
-            [x,k] = gsort(x,"lr","i");
+            [x,ki] = gsort(x,"lr","i");
             keq = and(x(2:$,:) == x(1:$-1,:),"c")
             if argn(1)>2
                 nb = [0 find(~keq) size(x,1)]
@@ -187,14 +188,14 @@ function [x, k, nb] = unique(x, varargin)
             keq = find(keq)
             if keq<>[] then keq = keq+1;end
             x(keq,:) = [];
-            k(keq,:) = [];
+            ki(keq,:) = [];
         else
             x = gsort(x,"lr","i");
             x( find(and(x(2:$,:) == x(1:$-1,:),"c")),:) = [];
         end
     elseif  orient==2|orient=="c" then
         if getK then
-            [x,k] = gsort(x,"lc","i");
+            [x,ki] = gsort(x,"lc","i");
             keq = and(x(:,2:$) == x(:,1:$-1),"r")
             if argn(1)>2
                 nb = [0 find(~keq) size(x,2)]
@@ -203,7 +204,7 @@ function [x, k, nb] = unique(x, varargin)
             keq = find(keq)
             if keq<>[] then keq = keq+1;end
             x(:,keq) = [];
-            k(:,keq) = [];
+            ki(:,keq) = [];
         else
             x = gsort(x,"lc","i");
             x(:, find(and(x(:,2:$) == x(:,1:$-1),"r")) ) = [];
@@ -213,7 +214,7 @@ function [x, k, nb] = unique(x, varargin)
         x = uniqueProcessNan(x, newInf, "restoreNan")
     end
     if keepOrder
-        [k, kk] = gsort(k,"g","i")
+        [ki, kk] = gsort(ki,"g","i")
         select orient
         case "*"
             x = x(kk)
index 55b5afe..8d838b6 100644 (file)
 // Checking output sizes
 // =====================
 // "*"
-[u,k,nb] = unique([]);
+[u,k,?,nb] = unique([]);
 assert_checkequal(u, []);
 assert_checkequal(k, []);
 assert_checkequal(nb,[]);
-[u,k,nb] = unique([1 4 5]);
+[u,k,?,nb] = unique([1 4 5]);
 sref = [1 3];
 assert_checkequal(size(u), sref);
 assert_checkequal(size(k), sref);
 assert_checkequal(size(nb),sref);
-[u,k,nb] = unique([1 4 5]');
+[u,k,?,nb] = unique([1 4 5]');
 sref = [3 1];
 assert_checkequal(size(u), sref);
 assert_checkequal(size(k), sref);
 assert_checkequal(size(nb),sref);
-[u,k,nb] = unique([1 3 4 ; 5 6 7]);
+[u,k,?,nb] = unique([1 3 4 ; 5 6 7]);
 sref = [6 1];
 assert_checkequal(size(u), sref);
 assert_checkequal(size(k), sref);
 assert_checkequal(size(nb),sref);
-[u,k,nb] = unique(rand(3,4,2));
+[u,k,?,nb] = unique(rand(3,4,2));
 sref = [24 1];
 assert_checkequal(size(u), sref);
 assert_checkequal(size(k), sref);
 assert_checkequal(size(nb),sref);
 
 // "r"
-[u,k,nb] = unique([], "r");
+[u,k,?,nb] = unique([], "r");
 assert_checkequal(u, []);
 assert_checkequal(k, []);
 assert_checkequal(nb,[]);
-[u,k,nb] = unique([1 3 4 ; 5 6 7], "r");
+[u,k,?,nb] = unique([1 3 4 ; 5 6 7], "r");
 assert_checkequal(size(u), [2 3]);
 assert_checkequal(size(k), [2 1]);
 assert_checkequal(size(nb),[2 1]);
 
 // "c"
-[u,k,nb] = unique([], "c");
+[u,k,?,nb] = unique([], "c");
 assert_checkequal(u,[]);
 assert_checkequal(k,[]);
-[u,k,nb] = unique([1 3 4 ; 5 6 7], "c");
+[u,k,?,nb] = unique([1 3 4 ; 5 6 7], "c");
 assert_checkequal(size(u), [2 3]);
 assert_checkequal(size(k), [1 3]);
 assert_checkequal(size(nb),[1 3]);
@@ -65,7 +65,7 @@ x = [ 2  0  2  2  2  0  0  0  2  0  0  2  2  1  0  1
     ];
 u = unique(x);
 assert_checkequal(u, [0 1 2]');
-[u,k,nb] = unique(x);
+[u,k,?,nb] = unique(x);
 assert_checkequal(u, [0 1 2]');
 assert_checkequal(k, [3 2 1]');
 assert_checkequal(nb,[13 7 12]');
@@ -75,26 +75,26 @@ uxc = [ 0  0  0  1  1  2  2  2
         0  1  2  0  1  0  1  2
       ];
 assert_checkequal(u, uxc);
-[u,k,nb] = unique(x, "c");
+[u,k,?,nb] = unique(x, "c");
 assert_checkequal(u, uxc);
 assert_checkequal(k, [6  11  2  16  14  9  1  3]);
 assert_checkequal(nb,[3  1   3  1   1   2  3  2]);
 
 u = unique(x', "r");
 assert_checkequal(u, uxc');
-[u,k,nb] = unique(x', "r");
+[u,k,?,nb] = unique(x', "r");
 assert_checkequal(u, uxc');
 assert_checkequal(k, [6  11  2  16  14  9  1  3]');
 assert_checkequal(nb,[3  1   3  1   1   2  3  2]');
 
 // keepOrder
 // ---------
-[u,k,nb] = unique(x, "keepOrder");
+[u,k,?,nb] = unique(x, "keepOrder");
 assert_checkequal(u, [2 1 0]');
 assert_checkequal(k, [1 2 3]');
 assert_checkequal(nb,[12 7 13]');
 
-[u,k,nb] = unique(x, "c", "keepOrder");
+[u,k,?,nb] = unique(x, "c", "keepOrder");
 uxc = [2  0  2  0  2  0  1  1
        1  2  2  0  0  1  1  0
       ];
@@ -102,7 +102,7 @@ assert_checkequal(u, uxc);
 assert_checkequal(k, [1  2  3  6  9  11 14 16]);
 assert_checkequal(nb,[3  3  2  3  2  1  1  1 ]);
 
-[u,k,nb] = unique(x', "r", "keepOrder");
+[u,k,?,nb] = unique(x', "r", "keepOrder");
 assert_checkequal(u, uxc');
 assert_checkequal(k, [1  2  3  6  9  11 14 16]');
 assert_checkequal(nb,[3  3  2  3  2  1  1  1 ]');
@@ -115,7 +115,7 @@ x = [Nan  Nan  Inf  Nan  0  Inf  Inf  Nan  Inf  Nan
     ];
 u = unique(x);
 assert_checkequal(u, [0 Inf Nan*ones(1,8)]');
-[u,k,nb] = unique(x);
+[u,k,?,nb] = unique(x);
 assert_checkequal(u, [0 Inf Nan*ones(1,8)]');
 assert_checkequal(k, [4 2 1 3 6 7 14 15 16 19]');
 assert_checkequal(nb,[7 5 1 1 1 1 1  1  1  1]');
@@ -125,21 +125,21 @@ uxc = [0  Inf  Inf  Inf  Nan  Nan  Nan  Nan  Nan
        0  0    Nan  Nan  0    0    0    Inf  Nan
       ];
 assert_checkequal(u, uxc);
-[u,k,nb] = unique(x, "c");
+[u,k,?,nb] = unique(x, "c");
 assert_checkequal(u, uxc);
 assert_checkequal(k, [5  6  3  7  2  4 10  1  8]);
 assert_checkequal(nb,[1  2  1  1  1  1  1  1  1]);
 
 u = unique(x', "r");
 assert_checkequal(u, uxc');
-[u,k,nb] = unique(x', "r");
+[u,k,?,nb] = unique(x', "r");
 assert_checkequal(u, uxc');
 assert_checkequal(k, [5  6  3  7  2  4 10  1  8]');
 assert_checkequal(nb,[1  2  1  1  1  1  1  1  1]');
 
 // With Nans & "uniqueNan" option
 // ------------------------------
-[u,k,nb] = unique(x, "uniqueNan");
+[u,k,?,nb] = unique(x, "uniqueNan");
 assert_checkequal(u, [0 Inf Nan]');
 assert_checkequal(k, [4 2 1]');
 assert_checkequal(nb,[7 5 8]');
@@ -147,19 +147,19 @@ assert_checkequal(nb,[7 5 8]');
 uxc = [0  Inf  Inf  Nan  Nan  Nan
        0  0    Nan  0    Inf  Nan
       ];
-[u,k,nb] = unique(x, "c", "uniqueNan");
+[u,k,?,nb] = unique(x, "c", "uniqueNan");
 assert_checkequal(u, uxc);
 assert_checkequal(k, [5  6  3  2  1  8]);
 assert_checkequal(nb,[1  2  2  3  1  1]);
 
-[u,k,nb] = unique(x', "r", "uniqueNan");
+[u,k,?,nb] = unique(x', "r", "uniqueNan");
 assert_checkequal(u, uxc');
 assert_checkequal(k, [5  6  3  2  1  8]');
 assert_checkequal(nb,[1  2  2  3  1  1]');
 
 // With Nans & "uniqueNan" & "keepOrder" options
 // ---------------------------------------------
-[u,k,nb] = unique(x, "uniqueNan", "keepOrder");
+[u,k,?,nb] = unique(x, "uniqueNan", "keepOrder");
 assert_checkequal(u, [Nan Inf 0]');
 assert_checkequal(k, [1 2 4]');
 assert_checkequal(nb,[8 5 7]');
@@ -169,12 +169,12 @@ uxc = [Nan  Nan  Inf  0  Inf  Nan
       ];
 //x = [Nan  Nan  Inf  Nan  0  Inf  Inf  Nan  Inf  Nan
 //     Inf  0    Nan  0    0  0    Nan  Nan  0    0
-[u,k,nb] = unique(x, "c", "uniqueNan", "keepOrder");
+[u,k,?,nb] = unique(x, "c", "uniqueNan", "keepOrder");
 assert_checkequal(u, uxc);
 assert_checkequal(k, [1  2  3  5  6  8]);
 assert_checkequal(nb,[1  3  2  1  2  1]);
 
-[u,k,nb] = unique(x', "r", "uniqueNan", "keepOrder");
+[u,k,?,nb] = unique(x', "r", "uniqueNan", "keepOrder");
 assert_checkequal(u, uxc');
 assert_checkequal(k, [1  2  3  5  6  8]');
 assert_checkequal(nb,[1  3  2  1  2  1]');
@@ -188,21 +188,21 @@ x = int8([-3 0 2 0 -3
          ]);
 u = unique(x);
 assert_checkequal(u, int8([-3 0 2])');
-[u,k,nb] = unique(x);
+[u,k,?,nb] = unique(x);
 assert_checkequal(u, int8([-3 0 2])');
 assert_checkequal(k, [1 4 6]');
 assert_checkequal(nb,[6 5 4]');
 
 u = unique(x, "r");
 assert_checkequal(u, int8([-3 0 2 0 -3 ; -3 2 0 2 -3]));
-[u,k,nb] = unique(x, "r");
+[u,k,?,nb] = unique(x, "r");
 assert_checkequal(u, int8([-3 0 2 0 -3 ; -3 2 0 2 -3]));
 assert_checkequal(k, [1;3]);
 assert_checkequal(nb,[2;1]);
 
 u = unique(x, "c");
 assert_checkequal(u, int8([-3 0 2 ; -3 0 2; -3 2 0]));
-[u,k,nb] = unique(x, "c");
+[u,k,?,nb] = unique(x, "c");
 assert_checkequal(u, int8([-3 0 2 ; -3 0 2; -3 2 0]));
 assert_checkequal(k, [1 2 3]);
 assert_checkequal(nb,[2 2 1]);
@@ -214,7 +214,7 @@ assert_checkequal(nb,[2 2 1]);
 i = %i;
 x = [1-i, 3+2*i, 1+i, 3-2*i, 3+2*i, 3-i, 1-i];
 assert_checkequal(unique(x), [1-i, 1+i, 3-2*i, 3-i, 3+2*i]);
-[u,k,nb] = unique(x);
+[u,k,?,nb] = unique(x);
 assert_checkequal(u, [1-i, 1+i, 3-2*i, 3-i, 3+2*i]);
 assert_checkequal(k, [1  3  4  6  2]);
 assert_checkequal(nb,[2  1  1  1  2]);
@@ -222,7 +222,7 @@ assert_checkequal(nb,[2  1  1  1  2]);
 c = [x($:-1:1) ; x ; x($:-1:1) ; 1:7 ; x];
 u = unique(c, "r");
 assert_checkequal(u, c([4 2 1],:));
-[u,k,nb] = unique(c, "r");
+[u,k,?,nb] = unique(c, "r");
 assert_checkequal(u, c([4 2 1],:));
 assert_checkequal(k, [4 2 1]');
 assert_checkequal(nb,[1 2 2]');
@@ -230,26 +230,26 @@ assert_checkequal(nb,[1 2 2]');
 u = unique(c', "c");
 kref = [4 2 1];
 assert_checkequal(u, c'(:,kref));
-[u,k,nb] = unique(c', "c");
+[u,k,?,nb] = unique(c', "c");
 assert_checkequal(u, c'(:,kref));
 assert_checkequal(k, kref);
 assert_checkequal(nb,[1 2 2]);
 
 // keepOrder
 // ---------
-[u,k,nb] = unique(x, "keepOrder");
+[u,k,?,nb] = unique(x, "keepOrder");
 assert_checkequal(u, [1-i, 3+2*i, 1+i, 3-2*i, 3-i]);
 assert_checkequal(k, [1  2  3  4  6]);
 assert_checkequal(nb,[2  2 1  1  1 ]);
 
 c = [x($:-1:1) ; x ; x($:-1:1) ; 1:7 ; x];
 kref = [1 2 4];
-[u,k,nb] = unique(c, "r", "keepOrder");
+[u,k,?,nb] = unique(c, "r", "keepOrder");
 assert_checkequal(u, c(kref,:));
 assert_checkequal(k, kref');
 assert_checkequal(nb,[2 2 1]');
 
-[u,k,nb] = unique(c', "c", "keepOrder");
+[u,k,?,nb] = unique(c', "c", "keepOrder");
 assert_checkequal(u, c'(:,kref));
 assert_checkequal(k, kref);
 assert_checkequal(nb,[2 2 1]);
@@ -263,7 +263,7 @@ t = ["AB" "BA" "BA" "BA" "AB" "BA" "AB" "AB" "BB" "AA" "AB" "BA" "BA" "BA" "AA"
     ];
 u = unique(t);
 assert_checkequal(u, ["AA" "AB" "BA" "BB"]');
-[u,k,nb] = unique(t);
+[u,k,?,nb] = unique(t);
 assert_checkequal(u, ["AA" "AB" "BA" "BB"]');
 assert_checkequal(k, [2 1 3 10]');
 assert_checkequal(nb,[6 10 8 6]');
@@ -273,21 +273,21 @@ utc = ["AA"  "AA"  "AB"  "AB"  "AB"  "BA"  "BA"  "BA"  "BB"
       ];
 u = unique(t, "c");
 assert_checkequal(u, utc);
-[u,k,nb] = unique(t, "c");
+[u,k,?,nb] = unique(t, "c");
 assert_checkequal(u, utc);
 assert_checkequal(k, [15 10 1 8 5 2 3 6 9]);
 assert_checkequal(nb,[1  1  1 1 3 2 3 2 1]);
 
 u = unique(t', "r");
 assert_checkequal(u, utc');
-[u,k,nb] = unique(t', "r");
+[u,k,?,nb] = unique(t', "r");
 assert_checkequal(u, utc');
 assert_checkequal(k, [15 10 1 8 5 2 3 6 9]');
 assert_checkequal(nb,[1  1  1 1 3 2 3 2 1]');
 
 // keepOrder
 // ---------
-[u,k,nb] = unique(t, "keepOrder");
+[u,k,?,nb] = unique(t, "keepOrder");
 assert_checkequal(u, ["AB" "AA" "BA" "BB"]');
 assert_checkequal(k, [1 2 3 10]');
 assert_checkequal(nb,[10 6 8 6]');
@@ -295,12 +295,12 @@ assert_checkequal(nb,[10 6 8 6]');
 utc = ["AB"  "BA"  "BA"  "AB"  "BA"  "AB"  "BB"  "AA"  "AA"
        "AA"  "AA"  "AB"  "BB"  "BB"  "BA"  "AB"  "AB"  "AA"
       ];
-[u,k,nb] = unique(t, "c", "keepOrder");
+[u,k,?,nb] = unique(t, "c", "keepOrder");
 assert_checkequal(u, utc);
 assert_checkequal(k, [1 2 3 5 6 8 9 10 15]);
 assert_checkequal(nb,[1 2 3 3 2 1 1 1  1 ]);
 
-[u,k,nb] = unique(t', "r", "keepOrder");
+[u,k,?,nb] = unique(t', "r", "keepOrder");
 assert_checkequal(u, utc');
 assert_checkequal(k, [1 2 3 5 6 8 9 10 15]');
 assert_checkequal(nb,[1 2 3 3 2 1 1 1  1 ]');