exponenta event banner

пересечься

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

Описание

пример

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.

'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 и предыдущих версий.

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

Примеры

свернуть все

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

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, массивы duration, массивы ячеек символьных векторов, таблиц или расписаний. При указании '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 является тем же классом, что и неразъемный ввод.

  • Если объединить 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 содержит индекс первого вхождения значения (или строки).

Совет

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

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

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