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.

'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уникальный возвращает строки 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]. 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

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

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

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

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

| | | | | | |

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