intersect

Установите пересечение двух массивов

Описание

пример

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

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

пример

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

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

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

пример

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

  • Обычно C = A(ia) и C = B(ib).

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

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

пример

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

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

Примеры

свернуть все

Создайте два вектора, которые имеют некоторые общие значения.

A = [7 1 7 7 4]; 
B = [7 0 4 4 0];

Найдите значения, общие для обоих A и B.

C = intersect(A,B)
C = 1×2

     4     7

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

A = table([1:5]',categorical({'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]',categorical({'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 = intersect(A,B)
C=3×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1       A      false
     3       C      false
     5       E      false

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

A = [7 1 7 7 4]; 
B = [7 0 4 4 0];

Найдите значения, общие для обоих A и B, а также векторы индекса ia и ib, таким образом C = A(ia) и C = B(ib).

[C,ia,ib] = intersect(A,B)
C = 1×2

     4     7

ia = 2×1

     5
     1

ib = 2×1

     3
     1

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

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

    Ted        M       27       74  
    Fred       M       52       68  
    Betty      F       31       64  
    Bob        M       46       61  
    Judy       F       35       64  

Составьте таблицу, B, со строками, общими с A.

B = table(categorical({'F';'M';'F';'F'}),...
[31;47;35;23],[64;68;62;58],...
'VariableNames',{'Gender' 'Age' 'Height'},...
'RowNames',{'Meg' 'Joe' 'Beth' 'Amy'})
B=4×3 table
            Gender    Age    Height
            ______    ___    ______

    Meg       F       31       64  
    Joe       M       47       68  
    Beth      F       35       62  
    Amy       F       23       58  

Найдите строки, общие для обоих A и B, а также векторы индекса ia и ib, таким образом C = A(ia,:) и C = B(ib,:).

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

    Betty      F       31       64  

ia = 3
ib = 1

Две строки, которые имеют одинаковые значения, но разные имена, считаются равными. Поэтому мы узнаем, что Бетти, A(3,:), и Мег, B(1,:) иметь одинаковый пол, возраст и рост.

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

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

Найдите строки, общие для обоих A и B а также векторы индекса ia и ib, таким образом C = A(ia,:) и C = B(ib,:).

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

     1     2     3
     2     2     2

ia = 2×1

     3
     1

ib = 2×1

     1
     2

A и B не нужно иметь одинаковое число строк, но они должны иметь одинаковое число столбцов.

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

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

A = [7 1 7 7 4]; B = [7 0 4 4 0];
[C,ia,ib] = intersect(A,B,'stable')
C = 1×2

     7     4

ia = 2×1

     1
     5

ib = 2×1

     1
     3

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

[C,ia,ib] = intersect(A,B,'sorted')
C = 1×2

     4     7

ia = 2×1

     5
     1

ib = 2×1

     3
     1

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

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

Найдите значения, общие для обоих A и B.

C = intersect(A,B)
C = 5

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

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

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

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

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

Найдите векторы символов, общие для обоих A и B.

[C,ia,ib] = intersect(A,B)
C = 1x2 cell
    {'cat'}    {'horse'}

ia = 2×1

     2
     4

ib = 2×1

     2
     4

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

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

A = ['A';'B';'C'], class(A)
A = 3x1 char array
    'A'
    'B'
    'C'

ans = 
'char'

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

B = [65 66 67;68 69 70], class(B)
B = 2×3

    65    66    67
    68    69    70

ans = 
'double'

Найдите значения, общие для обоих A и B.

[C,ia,ib] = intersect(A,B)
C = 3x1 char array
    'A'
    'B'
    'C'

ia = 3×1

     1
     2
     3

ib = 3×1

     1
     3
     5

intersect интерпретирует B как символьный массив и возвращает символьный массив, C.

class(C)
ans = 
'char'

Создайте вектор символов, содержащий имена животных с тремя буквами.

A = ['dog';'cat';'fox';'pig'];
class(A)
ans = 
'char'

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

B = {'cat','dog','fish','horse'};
class(B)
ans = 
'cell'

Найдите векторы символов, общие для обоих A и B.

C = intersect(A,B)
C = 2x1 cell
    {'cat'}
    {'dog'}

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

class(C)
ans = 
'cell'

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

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

A = [7 1 7 7 4]; 
B = [7 0 4 4 0];
[C1,ia1,ib1] = intersect(A,B)
C1 = 1×2

     4     7

ia1 = 2×1

     5
     1

ib1 = 2×1

     3
     1

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

[C2,ia2,ib2] = intersect(A,B,'legacy')
C2 = 1×2

     4     7

ia2 = 1×2

     5     4

ib2 = 1×2

     4     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 = intersect([7 0 1 5],[0 2 7 5],'sorted')
C =

     0     5     7

'stable'

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

Пример

C = intersect([7 0 1 5],[0 2 7 5],'stable')
C =

     7     0     5

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

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

свернуть все

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

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

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

  • Если на '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 которые являются общими для B. Если существует повторное значение (или строка) в A, затем ia содержит индекс первого вхождения значения (или строки).

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

Совет

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

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

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