уникальный

Уникальные значения в массиве

Синтаксис

C = unique(A)
C = unique(A,setOrder)
C = unique(A,occurrence)
C = unique(A,___,'rows')
C = unique(A,'rows',___)
[C,ia,ic] = unique(___)
[C,ia,ic] = unique(A,'legacy')
[C,ia,ic] = unique(A,'rows','legacy')
[C,ia,ic] = unique(A,occurrence,'legacy')
[C,ia,ic] = unique(A,'rows',occurrence,'legacy')

Описание

пример

C = unique(A) возвращает те же данные как в A, но без повторений. C находится в отсортированном порядке.

  • Если A является таблицей или расписанием, то unique возвращает уникальные строки в A в отсортированном порядке. Для расписаний unique принимает во внимание времена строки и значения строки при определении, уникальны ли строки, и сортирует выходное расписание C ко временам строки.

пример

C = unique(A,setOrder) возвращает уникальные значения A в определенном порядке. setOrder может быть 'sorted' (значение по умолчанию) или 'stable'.

C = unique(A,occurrence) задает который индексы возвратиться в случае повторных значений. occurrence может быть 'first' (значение по умолчанию) или 'last'.

пример

C = unique(A,___,'rows') и C = unique(A,'rows',___) обрабатывают каждую строку A как единственная сущность и возвращают уникальные строки A в отсортированном порядке. Вы должны задать A и опционально можете задать setOrder или occurrence.

Опция 'rows' не поддерживает массивы ячеек.

[C,ia,ic] = unique(___) также возвращает индексные векторы ia и ic с помощью любого из предыдущих синтаксисов.

  • Если A является вектором, то C = A(ia) и A = C(ic).

  • Если A является матрицей или массивом, то C = A(ia) и A(:) = C(ic).

  • Если опция 'rows' задана, то C = A(ia,:) и A = C(ic,:).

  • Если A является таблицей или расписанием, то C = A(ia,:) и A = C(ic,:).

пример

[C,ia,ic] = unique(A,'legacy'), [C,ia,ic] = unique(A,'rows','legacy'), [C,ia,ic] = unique(A,occurrence,'legacy') и [C,ia,ic] = unique(A,'rows',occurrence,'legacy') сохраняют поведение функции unique от R2012b и предшествующих релизов.

Опция 'legacy' не поддерживает категориальные массивы, массивы datetime, массивы длительности, calendarDuration массивы, таблицы или расписания.

Примеры

свернуть все

Задайте вектор с повторным значением.

A = [9 2 9 5];

Найдите уникальные значения A.

C = unique(A)
C = 1×3

     2     5     9

Задайте таблицу с повторными данными.

Name = {'Fred';'Betty';'Bob';'George';'Jane'};
Age = [38;43;38;40;38];
Height = [71;69;64;67;64];
Weight = [176;163;131;185;131];

A = table(Age,Height,Weight,'RowNames',Name)
A=5×3 table
              Age    Height    Weight
              ___    ______    ______

    Fred      38       71       176  
    Betty     43       69       163  
    Bob       38       64       131  
    George    40       67       185  
    Jane      38       64       131  

Найдите уникальные строки A.

C = unique(A)
C=4×3 table
              Age    Height    Weight
              ___    ______    ______

    Bob       38       64       131  
    Fred      38       71       176  
    George    40       67       185  
    Betty     43       69       163  

unique возвращает строки A в отсортированном порядке первой переменной, Age и затем второй переменной, Height.

Задайте вектор с повторным значением.

A = [9 2 9 5];

Найдите уникальные значения A и индексных векторов ia и ic, таким что C = A(ia) и A = C(ic).

[C, ia, ic] = unique(A)
C = 1×3

     2     5     9

ia = 3×1

     2
     4
     1

ic = 4×1

     3
     1
     3
     2

Создайте 12 3 матрица с некоторыми повторными строками.

A = randi(3,12,3)
A = 12×3

     3     3     3
     3     2     3
     1     3     3
     3     1     2
     2     2     2
     1     3     1
     1     3     3
     2     3     1
     3     2     1
     3     1     1
      ⋮

Найдите уникальные строки A на основе данных в первых двух столбцах. Задайте три выходных параметров, чтобы возвратить индексные векторы ia и ic.

[C,ia,ic] = unique(A(:,1:2),'rows')
C = 6×2

     1     3
     2     2
     2     3
     3     1
     3     2
     3     3

ia = 6×1

     3
     5
     8
     4
     2
     1

ic = 12×1

     6
     5
     1
     4
     2
     1
     1
     3
     5
     4
      ⋮

Используйте ia, чтобы индексировать в A и получить строки, которые имеют уникальные комбинации элементов в первых двух столбцах.

uA = A(ia,:)
uA = 6×3

     1     3     3
     2     2     2
     2     3     1
     3     1     2
     3     2     3
     3     3     3

Найдите уникальные элементы в векторе и затем используйте accumarray, чтобы считать число раз, каждый уникальный элемент появляется.

Создайте вектор случайных целых чисел от 1 до 5.

a = randi([1 5],200,1);

Найдите уникальные элементы в векторе. Возвратите индексные векторы ia и ic.

[C,ia,ic] = unique(a);

Считайте число раз, каждый элемент в C появляется в a. Задайте ic как первый входной параметр к accumarray и 1 как второй входной параметр так, чтобы функциональные количества повторили индексы в ic. Обобщите результаты.

a_counts = accumarray(ic,1);
value_counts = [C, a_counts]
value_counts = 5×2

     1    46
     2    36
     3    38
     4    39
     5    41

Используйте аргумент setOrder, чтобы задать упорядоченное расположение значений в C.

Задайте 'stable', если вы хотите, чтобы значения в C имели тот же порядок как в A.

A = [9 2 9 5];
[C, ia, ic] = unique(A,'stable')
C = 1×3

     9     2     5

ia = 3×1

     1
     2
     4

ic = 4×1

     1
     2
     1
     3

Также можно задать порядок 'sorted'.

[C, ia, ic] = unique(A,'sorted')
C = 1×3

     2     5     9

ia = 3×1

     2
     4
     1

ic = 4×1

     3
     1
     3
     2

Задайте вектор, содержащий NaN.

A = [5 5 NaN NaN];

Найдите уникальные значения A.

C = unique(A)
C = 1×3

     5   NaN   NaN

unique обрабатывает значения NaN как отличные.

Создайте векторный x. Получите второй векторный y путем преобразования и непреобразования x. Это преобразование представляет различия в округлении в y.

x = (1:6)'*pi;
y = 10.^log10(x);

Проверьте, что x и y не идентичны путем взятия различия.

x-y
ans = 6×1
10-14 ×

    0.0444
         0
         0
         0
         0
   -0.3553

Используйте unique, чтобы найти уникальные элементы в конкатенированном векторном [x;y]. Функция unique выполняет точные сравнения и решает, что некоторые значения в x не точно равны значениям в y. Это те же элементы, которые имеют ненулевое различие в x-y. Таким образом c содержит значения, которые, кажется, копии.

c = unique([x;y])
c = 8×1

    3.1416
    3.1416
    6.2832
    9.4248
   12.5664
   15.7080
   18.8496
   18.8496

Используйте uniquetol, чтобы выполнить сравнение с помощью маленького допуска. uniquetol обрабатывает элементы, которые являются в допуске как равный.

C = uniquetol([x;y])
C = 6×1

    3.1416
    6.2832
    9.4248
   12.5664
   15.7080
   18.8496

Создайте массив ячеек из символьных векторов.

A = {'one','two','twenty-two','One','two'};

Найдите уникальные векторы символов содержавшимися в A.

C = unique(A)
C = 1x4 cell array
    {'One'}    {'one'}    {'twenty-two'}    {'two'}

Создайте массив ячеек из символьных векторов, A, где некоторые векторы имеют конечный пробел.

A = {'dog','cat','fish','horse','dog ','fish '};

Найдите уникальные векторы символов содержавшимися в A.

C = unique(A)
C = 1x6 cell array
    {'cat'}    {'dog'}    {'dog '}    {'fish'}    {'fish '}    {'horse'}

unique обрабатывает конечный пробел в массивах ячеек из символьных векторов как отличные символы.

Используйте флаг 'legacy', чтобы сохранить поведение unique от R2012b и предшествующих релизов в вашем коде.

Найдите уникальные элементы A с текущим поведением.

A = [9 2 9 5];
[C1, ia1, ic1] = unique(A)
C1 = 1×3

     2     5     9

ia1 = 3×1

     2
     4
     1

ic1 = 4×1

     3
     1
     3
     2

Найдите уникальные элементы A и сохраните устаревшее поведение.

[C2, ia2, ic2] = unique(A, 'legacy')
C2 = 1×3

     2     5     9

ia2 = 1×3

     2     4     3

ic2 = 1×4

     3     1     3     2

Входные параметры

свернуть все

Входной массив.

  • Если A является таблицей, то unique не принимает имена строки во внимание. Две строки, которые имеют те же значения, но различные имена, рассматриваются равными.

  • Если A является расписанием, то unique принимает времена строки во внимание. Две строки, которые имеют те же значения, но различные времена, не рассматриваются равными.

A может также быть объектом со следующими методами класса:

  • sort (или sortrows для опции 'rows')

  • ne

Методы класса объекта должны быть сопоставимы друг с другом. Эти объекты включают разнородные массивы, выведенные от того же корневого класса. Например, A может быть массивом указателей на графические объекты.

Прикажите, чтобы флаг, заданный как 'sorted' или 'stable', указал на порядок значений (или строки) в C.

Закажите флагЗначение
'sorted'Значения (или строки) в C возвращаются в отсортированном порядке. Например: C = unique([5 5 3 4],'sorted') возвращает C = [3 4 5].
'stable'Значения (или строки) в C возвращаются в том же порядке как в A. Например: C = unique([5 5 3 4],'stable') возвращает C = [5 3 4].

Типы данных: char | string

Флаг Occurrence, заданный как 'first' или 'last', указывает, должен ли ia содержать первые или последние индексы к повторным значениям, найденным в A.

Флаг возникновенияЗначение
'last'Если существуют повторенные значения (или строки) в A, то ia содержит индекс к последнему вхождению повторного значения. Например: [C,ia,ic] = unique([9 9 9],'last','legacy') возвращает ia = 3. Это - поведение по умолчанию, когда флаг 'legacy' задан.
'first'Если существуют повторенные значения (или строки) в A, то ia содержит индекс к первому возникновению повторного значения. Например: [C,ia,ic] = unique([9 9 9],'first') возвращает ia = 1. Это поведение по умолчанию.

Типы данных: char | string

Выходные аргументы

свернуть все

Уникальные данные A, возвращенного как массив. Класс C совпадает с классом входного параметра A. Форма C зависит от того, является ли входной параметр вектором или матрицей:

  • Если флаг 'rows' не задан, и A является вектором - строкой, то C является вектором - строкой.

  • Если флаг 'rows' не задан, и A не является вектором - строкой, то C является вектором - столбцом.

  • Если флаг 'rows' задан, то C является матрицей, содержащей уникальные строки A.

Индексируйте к A, возвращенному как вектор - столбец индексов к первому возникновению повторных элементов. Когда флаг 'legacy' задан, ia является вектором - строкой, который содержит индексы к последнему вхождению повторных элементов.

Индексы обычно удовлетворяют C = A(ia). Если A является таблицей, или если опция 'rows' задана, то C = A(ia,:).

Индексируйте к C, возвращенному как вектор - столбец, когда флаг 'legacy' не будет задан. ic содержит индексы, которые удовлетворяют следующие свойства.

  • Если A является вектором, то A = C(ic).

  • Если A является матрицей или массивом, то A(:) = C(ic).

  • Если A является таблицей, или если опция 'rows' задана, то A = C(ic,:).

Советы

  • Используйте uniquetol, чтобы найти уникальные числа с плавающей запятой с помощью допуска.

  • Чтобы найти уникальные строки в таблицах или расписаниях относительно подмножества переменных, можно использовать индексирование столбца. Например, можно использовать unique(A(:,vars)), где vars является положительным целым числом, вектором положительных целых чисел, имени переменной, массива ячеек имен переменных или логического вектора. Также можно использовать vartype, чтобы создать индекс, который выбирает переменные заданного типа.

Расширенные возможности

Представлено до R2006a

Была ли эта тема полезной?