exponenta event banner

setxor

Установить исключающее ИЛИ для двух массивов

Описание

пример

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

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

пример

C = setxor(A,B,setOrder) прибыль C в определенном порядке. setOrder может быть 'sorted' или 'stable'.

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

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

пример

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

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

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

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

пример

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

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

Примеры

свернуть все

Определите два вектора с общим значением.

A = [5 1 3 3 3]; B = [4 1 2];

Найти значения A и B которые не находятся на пересечении.

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

     2     3     4     5

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

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 = setxor(A,B)
C=4×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     2       B      true 
     4       D      true 
     7       G      false
     9       I      false

Определите два вектора с общим значением.

A = [5 1 3 3 3]; B = [4 1 2];

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

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

     2     3     4     5

ia = 2×1

     3
     1

ib = 2×1

     3
     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] = setxor(A,B)
C=3×3 table
            Gender    Age    Height
            ______    ___    ______

    Ted       M       27       74  
    Joe       M       47       68  
    Fred      M       52       68  

ia = 2×1

     1
     2

ib = 2

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

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

A = [7 8 9; 7 7 1; 7 7 1; 1 2 3; 4 5 6];
B = [1 2 3; 4 5 6; 7 7 2];

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

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

     7     7     1
     7     7     2
     7     8     9

ia = 2×1

     2
     1

ib = 3

C - сортированная комбинация строк A(ia,:) и B(ib,:).

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

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

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

     5     3     4     2

ia = 2×1

     1
     3

ib = 2×1

     1
     3

Кроме того, можно указать 'sorted' заказ.

[C,ia,ib] = setxor(A,B,'sorted')
C = 1×4

     2     3     4     5

ia = 2×1

     3
     1

ib = 2×1

     3
     1

Определение двух векторов, содержащих NaN.

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

Найти симметричную разность векторов A и B.

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

   NaN   NaN   NaN   NaN

setxor функция обрабатывает NaN значения как отдельные.

Создание массива ячеек из символьных векторов, A.

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

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

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

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

[C,ia,ib] = setxor(A,B)
C = 1x4 cell
    {'dog'}    {'dog '}    {'fish'}    {'fish '}

ia = 2×1

     1
     3

ib = 2×1

     1
     3

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

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

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

ans = 
'char'

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

B = [66 67 68], class(B)
B = 1×3

    66    67    68

ans = 
'double'

Найти симметричное различие A и B.

C = setxor(A,B)
C = 2x1 char array
    'A'
    'D'

Результатом является символьный массив векторов столбцов.

class(C)
ans = 
'char'

Создание символьного вектора, A.

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

Создание массива ячеек из символьных векторов, B.

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

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

C = setxor(A,B)
C = 4x1 cell
    {'fish' }
    {'fox'  }
    {'horse'}
    {'pig'  }

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

class(C)
ans = 
'cell'

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

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

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

     2     3     4     5

ia1 = 2×1

     3
     1

ib1 = 2×1

     3
     1

Найдите симметричное различие и сохраните унаследованное поведение.

[C2,ia2,ib2] = setxor(A,B,'legacy')
C2 = 1×4

     2     3     4     5

ia2 = 1×2

     5     1

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' опция)

  • eq

  • ne

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

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

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

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

Пример

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

     2     3     4     5

'stable'

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

Пример

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

     5     3     4     2

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

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

свернуть все

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

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

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

  • Если'rows' флаг указан, затем C является матрицей, содержащей строки A и B которые не находятся на перекрестке.

  • Если все значения (или строки) A также находятся в B, то C пуст.

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

  • Если класс A и B те же самые, то C является тем же классом.

  • Если объединить char или неразрушающий числовой класс с double, то C является тем же классом, что и неразъемный ввод.

  • Если объединить logical класс с double, то C является double.

  • При объединении массива ячеек символьных векторов с char, то C является массивом ячеек символьных векторов.

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

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

  • Если объединить строковый массив с символьным вектором или массивом ячеек символьных векторов, то C является строковым массивом.

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

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

Совет

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

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

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