unique

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

Описание

пример

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

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

  • Если A является категориальным массивом, затем порядок сортировки определяется порядком категорий.

пример

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.

The '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 и предыдущих релизов.

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

Примеры

свернуть все

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

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. unique возвращает строки A в сортированном порядке по первой переменной Age а затем второй переменной Height.

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  

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

[C,ia] = unique(A.Age);
B = A(ia,:)
B=3×3 table
              Age    Height    Weight
              ___    ______    ______

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

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

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

Создайте матрицу 10 на 3 с некоторыми повторяющимися строками.

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

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

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

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

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

ia = 7×1

     6
     7
     3
     5
     1
     4
     2

ic = 10×1

     5
     7
     3
     6
     4
     1
     2
     4
     7
     7

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

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

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

Найдите уникальные элементы в векторе и затем используйте 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]. The 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
    {'One'}    {'one'}    {'twenty-two'}    {'two'}

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

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

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

C = unique(A)
C = 1x6 cell
    {'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 является категориальным массивом, затем порядок сортировки определяется порядком категорий. Чтобы увидеть порядок сортировки категориального массива, используйте categories функция.

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

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

  • ne

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

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

ФлагОписание

'sorted'

Значения (или строки) в C возврат в отсортированном порядке по возвращению sort.

Пример

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

Флаг вхождения, заданный как '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 для поиска уникальных чисел с плавающей запятой с помощью допуска.

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

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

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