union

Установите объединение двух массивов

Описание

пример

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

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

пример

C = union(A,B,setOrder) возвращает C в определенном порядке. setOrder можно 'sorted' или 'stable'.

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

The 'rows' опция не поддерживает массивы ячеек, если один из входов не является либо категориальным массивом, либо массивом datetime.

пример

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

  • Как правило, значения в C являются отсортированной комбинацией элементов A(ia) и B(ib).

  • Если на 'rows' задается опция, затем строки C являются отсортированной комбинацией строк A(ia,:) и B(ib,:).

  • Если A и B являются таблицами или расписаниями, затем C - отсортированная комбинация строк A(ia,:) и B(ib,:).

пример

[C,ia,ib] = union(A,B,'legacy') и [C,ia,ib] = union(A,B,'rows','legacy') сохранить поведение union функция от R2012b и предыдущих релизов.

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

Примеры

свернуть все

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

A = [5 7 1]; 
B = [3 1 1];

Найдите объединение векторов A и B.

C = union(A,B)
C = 1×4

     1     3     5     7

Задайте две таблицы с общими строками.

A = table([1:5]',['A';'B';'C';'D';'E'],logical([0;1;0;1;0]))
A=5×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1       A      false
     2       B      true 
     3       C      false
     4       D      true 
     5       E      false

B = table([1:2:10]',['A';'C';'E';'G';'I'],logical(zeros(5,1)))
B=5×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1       A      false
     3       C      false
     5       E      false
     7       G      false
     9       I      false

Найдите объединение таблиц A и B.

C = union(A,B)
C=7×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1       A      false
     2       B      true 
     3       C      false
     4       D      true 
     5       E      false
     7       G      false
     9       I      false

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

A = [5 7 1]; 
B = [3 1 1];

Найдите объединение векторов A и B, а также векторы индекса, ia и ib.

[C,ia,ib] = union(A,B)
C = 1×4

     1     3     5     7

ia = 3×1

     3
     1
     2

ib = 1

Значения в C являются комбинированными значениями A(ia) и B(ib).

Задайте таблицу, A, пола, возраста и роста для трех человек.

A = table(['M';'M';'F'],[27;52;31],[74;68;64],...
'VariableNames',{'Gender' 'Age' 'Height'},...
'RowNames',{'Ted' 'Fred' 'Betty'})
A=3×3 table
             Gender    Age    Height
             ______    ___    ______

    Ted        M       27       74  
    Fred       M       52       68  
    Betty      F       31       64  

Задайте таблицу, B с теми же переменными, что и A.

B = table(['F';'M'],[64;68],[31;47],...
'VariableNames',{'Gender' 'Height' 'Age'},...
'RowNames',{'Meg' 'Joe'})
B=2×3 table
           Gender    Height    Age
           ______    ______    ___

    Meg      F         64      31 
    Joe      M         68      47 

Найдите объединение таблиц A и B, а также векторы индекса, ia и ib.

[C,ia,ib] = union(A,B)
C=4×3 table
             Gender    Age    Height
             ______    ___    ______

    Betty      F       31       64  
    Ted        M       27       74  
    Joe        M       47       68  
    Fred       M       52       68  

ia = 3×1

     3
     1
     2

ib = 2

Данные для Meg и Betty те же самые. union возвращает только индекс из A, что соответствует Betty.

Задайте две матрицы с общей строкой.

A = [2 2 2; 0 0 1];
B = [1 2 3; 2 2 2; 2 2 2];

Найти объединенные строки A и B, без повторения, а также векторы индекса ia и ib.

[C,ia,ib] = union(A,B,'rows')
C = 3×3

     0     0     1
     1     2     3
     2     2     2

ia = 2×1

     2
     1

ib = 1

Строки C являются объединенными строками A(ia,:) и B(ib,:).

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

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

A = [5 7 1]; 
B = [3 1 1];
[C,ia,ib] = union(A,B,'stable')
C = 1×4

     5     7     1     3

ia = 3×1

     1
     2
     3

ib = 1

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

A = [5 7 1]; 
B = [3 1 1];
[C,ia,ib] = union(A,B,'sorted')
C = 1×4

     1     3     5     7

ia = 3×1

     3
     1
     2

ib = 1

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

A = [5 NaN 1]; 
B = [4 NaN NaN];

Найдите объединение векторов A и B.

C = union(A,B)
C = 1×6

     1     4     5   NaN   NaN   NaN

union лечит NaN значений как отдельных.

Создайте массив ячеек из векторов символов, A.

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

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

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

Объедините элементы A и B.

[C,ia,ib] = union(A,B)
C = 1x6 cell
    {'cat'}    {'dog'}    {'dog '}    {'fish'}    {'fish '}    {'horse'}

ia = 4×1

     2
     1
     3
     4

ib = 2×1

     1
     3

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

Создайте вектор-столбец символьный массив.

A = ['A';'B';'C']
A = 3x1 char array
    'A'
    'B'
    'C'

class(A)
ans = 
'char'

Создайте вектор-строку, содержащую элементы числового типа double.

B = [68 69 70]
B = 1×3

    68    69    70

class(B)
ans = 
'double'

The union от A и B возвращает символьный массив векторов-столбцов.

C = union(A,B)
C = 6x1 char array
    'A'
    'B'
    'C'
    'D'
    'E'
    'F'

class(C)
ans = 
'char'

Создайте вектор символов, содержащий буквы a , b, и c.

A = ['a';'b';'c'];
class(A)
ans = 
'char'

Создайте массив ячеек из векторов символов, содержащий буквы c, d, и e.

B = {'c','d','e'};
class(B)
ans = 
'cell'

Объедините элементы A и B.

C = union(A,B)
C = 5x1 cell
    {'a'}
    {'b'}
    {'c'}
    {'d'}
    {'e'}

Результат, C, - массив ячеек из векторов символов.

class(C)
ans = 
'cell'

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

Найти объединение A и B с текущим поведением.

A = [5 7 1]; 
B = [3 1 1];
[C1,ia1,ib1] = union(A,B)
C1 = 1×4

     1     3     5     7

ia1 = 3×1

     3
     1
     2

ib1 = 1

Найти объединение A и B, и сохранить унаследованное поведение.

A = [5 7 1]; 
B = [3 1 1];
[C2,ia2,ib2] = union(A,B,'legacy')
C2 = 1×4

     1     3     5     7

ia2 = 1×2

     1     2

ib2 = 1×2

     3     1

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

свернуть все

Входные массивы, заданные как числовые массивы, логические массивы, символьные массивы, строковые массивы, категориальные массивы, массивы datetime, массивы длительности, массивы ячеек из векторов символов, таблицы или timetables. Если вы задаете 'rows' опция, A и B должно иметь одинаковое число столбцов.

A и B должен быть одного и того же класса за следующими исключениями:

  • logical, char, и все числовые классы могут объединяться с double массивы.

  • Массивы ячеек из символьных векторов можете комбинировать с символьными массивами или строковые массивы.

  • Категориальные массивы могут сочетаться с символьными массивами, массивами ячеек векторов символов или строковых массивов.

  • Массивы Datetime могут комбинироваться с массивами ячеек дат или отдельными векторами символов дат векторов символов.

Существуют дополнительные требования к A и B на основе типа данных:

  • Если A и B оба являются порядковыми категориальными массивами, они должны иметь одинаковые наборы категорий, включая их порядок. Если ни один из них Aни B являются порядковыми, они не должны иметь одинаковых наборов категорий, и сравнение выполняется с использованием имен категорий. В этом случае категории C отсортированное объединение категорий из A и B.

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

  • Если A и B являются массивами datetime, они должны быть согласованы друг с другом в том, задают ли они часовой пояс.

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

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

  • ne

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

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

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

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

Пример

C = union([5 5 3],[1 2 5],'sorted')
C =

     1     2     3     5

'stable'

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

Пример

C = union([5 5 3],[1 2 5],'stable')
C =

     5     3     1     2

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

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

свернуть все

Объединенные данные A и B, возвращенный как вектор, матрица, таблица или расписание. Если вводится A и B являются таблицами или расписаниями, затем порядком переменных в C совпадает с порядком переменных в A.

Ниже описывается форма C когда входами являются векторы или матрицы и когда 'legacy' флаг не задан:

  • Если на 'rows' флаг не задан, тогда C является вектор-столбец, если только оба не A и B Векторы-строки, в каком случае C является вектор-строка. Для примера, union([],[1 2]) возвращает вектор-столбец.

  • Если на 'rows' задается флаг, затем C - матрица, содержащая объединенные строки A и B.

Класс входов A и B определяет класс C:

  • Если класс A и B то же самое C - тот же класс.

  • Если вы комбинируете char или недоусмысленный числовой класс с double, затем C - тот же класс, что и входной вход nondouble.

  • Если вы комбинируете logical класс с double, затем C является double.

  • Если вы комбинируете массив ячеек из векторов символов с char, затем C - массив ячеек из векторов символов.

  • Если вы комбинируете категориальный массив с вектором символов, массивом ячеек из векторов символов или строкой, то C является категориальным массивом.

  • Если вы комбинируете массив datetime с массивом ячеек из векторов символов даты или с одним вектором символов даты, то C является массивом datetime.

  • Если вы комбинируете строковые массивы с вектором символов или массивом ячеек векторов символов, то C являются строковые массивы.

Индексируйте к A, возвращается как вектор-столбец, когда 'legacy' флаг не задан. ia указывает значения (или строки) в A которые вносят свой вклад в объединение. Если значение (или строка) появляется несколько раз в A, затем ia содержит индекс первого вхождения значения (или строки). Если значение появляется в обоих A и B, затем ia содержит индекс к первому вхождению в A.

Индексируйте к B, возвращается как вектор-столбец, когда 'legacy' флаг не задан. ib указывает значения (или строки) в B которые вносят свой вклад в объединение. Если существует повторное значение (или строка), появляющееся исключительно в B, затем ib содержит индекс к первому вхождению значения. Если значение (или строка) появляется в обоих A и B, затем ib не содержит индекс значения (или строки).

Совет

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

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

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