Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Основные функции > Операции с множествами > unique

unique

удалить все повторяющиеся компоненты из вектора или матрицы

Синтаксис

[U, km, ku, nb] = unique(M)
[U, km, ku, nb] = unique(M, orient)
[U, km, ku, nb] = unique(.., "keepOrder")
[U, km, ku, nb] = unique(.., "uniqueNan")

Аргументы

M

вектор, матрица или гиперматрица логических значений, чисел или текстов. Принимаются числовые или логические разрежённые матрицы.

orient

флаг с возможными значениями: 1 или "r", 2 или "c". Не может использоваться, если M является гиперматрицей.

U

  • Если orient не используется: вектор извлечённых M компонентов, сортированных в полядке возрастания. Если M является вектором-строкой, то U так же является вектором-строкой. В случаях всех иных M U является вектором-столбцом.

  • Если orient используется: матрица извлечённых M строк или столбцов, сортированных в лексикографическом порядке возрастания.

Если M является разрежённой, то U всегда разрежённая.

km

Вектор индексов первых встреченных значений, таких что U = M(km) или U = M(km,:) или U = M(:,km).

km является строкой, если M является строкой или если используется orient="c". В противном случае это столбец.

ku
Массив индексов в U, таких что в соответствии с опцией orient
  • "*": ku имеет размер size(M), и U(ku) = M
  • "r": ku имеет размер [size(M,1), 1], и U(ku,:) = M
  • "c": ku имеет размер [1, size(M,2)], и U(:,ku) = M

ku является плотной, даже когда M является разрежённой и используется всеобщий режим "*".
nb

Вектор целых чисел > 0 той же формы, что и k: количество случаев M соответствующих непродублированных элементов (компонентов, строк, столбцов) возвращаемых в U.

Описание

unique(M) возвращает вектор, который содержит уникальные элементы M в порядке возрастания.

unique(M,"r") или unique(M,1) возвращает уникальные строки M в лексикографическом порядке возрастания.

unique(M,"c") или unique(M,2) возвращает уникальные столбцы M в лексикографическом порядке возрастания.

unique(M,.. "keepOrder") возвращает M недублированных входов в их исходном порядке в M. "keepOrder" нечувствителен к регистру.

unique(M,.. "uniqueNan") принимает все значения Nan одинаковыми и не дублирует их. По умолчанию любой Nan отличается от другого Nan включая себя самого: %nan<>%nan равен истине, пока не будет использоваться "uniqueNan". Определение "uniqueNan" нечувствительно к регистру.

Для логических значений, unique(…) полезна главным образом с опциями "r" or "c".

Комплексные числа сортируются сначала по амплитудам, а затем по фазам в [-π,π].

Примеры

С некотороми числами:

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, km] = unique(M)
[uc, kmc] = unique(M, "c")
--> M
 M =
  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, km] = unique(M)
 u  =
  0
  1
  2

 km  =
   2.
   4.
   1.

--> [uc, kmc] = unique(M, "c")
 uc  =
  0  0  0  1  1  1  2  2
  0  1  2  0  1  2  0  2

 kmc  =
   14.   2.   11.   12.   5.   6.   1.   3.

С комплексными числами:

i = %i;
c = [1+i, 1-i, -i, i, -i, 1+i]
[u, k] = unique(c)
[uc, kc] = unique(c, "c")
--> c = [1+i, 1-i, -i, i, -i, 1+i]
 c  =
   1. + i    1. - i    0. - i    0. + i    0. - i    1. + i

--> [u, k] = unique(c)
 u  =
   0. - i    0. + i    1. - i    1. + i
 k  =
   3.   4.   2.   1.

--> [uc, kc] = unique(c, "c")
 uc  =
   0. - i    0. + i    1. - i    1. + i
 kc  =
   3.   4.   2.   1.

С текстом:

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, 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")  // сохранение исходного порядка столбцов
[and(t(:,ktc)==uc), and(uc(:,kuc)==t) ]
--> 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"
  >     ]
 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  =
!AA  AB  BA  BB  !

--> [u, kt, ku, nb] = unique(t(1,:))
 u  =
!AA  AB  BA  BB  !

 kt  =
   10.   3.   1.   2.

 nb  =
   2.   5.   7.   1.

--> [u, kt] = unique(t(1,:), "keepOrder")  // сохранение исходного порядка
 u  =
!BA  BB  AB  AA  !

 kt  =
   1.   2.   3.   10.

--> [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  !

 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  !

 ktc  =
   1.   2.   3.   5.   6.   8.   9.   10.   15.

 nb  =
   2.   1.   1.   3.   2.   1.   3.   1.   1.

--> [and(t(:,ktc)==uc), and(uc(:,kuc)==t) ]
 ans  =
  T  T

Со значениями Nan (и Inf). Опция "uniqueNan":

M = [2  2  %nan  1     2  0     1  %nan  0    %nan
     1  0  1     %nan  0  %inf  0  1     %inf 1
    ];
[v, km, kv, n] = unique(M); v',n'
[v, km, kv, n] = unique(M, "uniqueNan"); v',n'
unique(M, "c")
[v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
--> M
 M  =
   2.   2.   Nan   1.    2.   0.    1.   Nan   0.    Nan
   1.   0.   1.    Nan   0.   Inf   0.   1.    Inf   1.

--> [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, km, kv, n] = unique(M, "uniqueNan"); v',n'
 ans  =
   0.   1.   2.   Inf   Nan

 ans  =
   5.   6.   3.   2.   4.

--> unique(M, "c")
 ans  =
   0.    1.   1.    2.   2.   Nan   Nan   Nan
   Inf   0.   Nan   0.   1.   1.    1.    1.

--> [v, kmc, kvc, n] = unique(M, "c", "uniqueNan")
 v  =
   0.    1.   1.    2.   2.   Nan
   Inf   0.   Nan   0.   1.   1.

 kmc  =
   6.   7.   4.   2.   1.   3.

 n  =
   2.   1.   1.   2.   1.   3.

Смотрите также

  • members — count (and locate) in an array each element or row or column of another array
  • gsort — сортирует массивы логических, числовых и строковых значений
  • vectorfind — ищет расположение вектора (отмеченный символом групповой подстановки) в матрице или гиперматрице
  • union — Множество всех элементов, строк или столбцов двух массивов без дубликатов
  • intersect — элементы, либо строки либо столбцы, имеющиеся в обоих входных массивах, без повторов

История

ВерсияОписание
6.0.2 unique() теперь может использоваться для удаления дубликатов комплексных чисел.
6.1.0
  • Расширено до логических значений.
  • Введены опции "keepOrder" и "uniqueNan".
  • Введён четвертый выходной аргумент nb.
6.1.1 Реализован третий выходной аргумент ku. Теперь принимаются двумерные разрежённые матрицы.
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Jul 20 11:21:23 CEST 2021