exponenta event banner

уникальный

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

Описание

пример

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

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

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

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