setdiff

Разность множеств двух массивов

Описание

пример

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

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

пример

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

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

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

пример

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

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

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

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

пример

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

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

Примеры

свернуть все

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

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

Найдите значения в A это не находится в B.

C = setdiff(A,B)
C = 1×3

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

     2       B      true 
     4       D      true 

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

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

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

[C,ia] = setdiff(A,B)
C = 1×3

     1     3     5

ia = 3×1

     4
     1
     5

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

A = table(['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(['F';'M';'F';'F'],[64;68;62;58],[31;47;35;23],...
'VariableNames',{'Gender' 'Height' 'Age'},...
'RowNames',{'Meg' 'Joe' 'Beth' 'Amy'})
B=4×3 table
            Gender    Height    Age
            ______    ______    ___

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

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

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

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

ia = 4×1

     5
     1
     4
     2

Строки C находятся в отсортированном порядке сначала Gender и затем Age.

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

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

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

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

     1     4     5
     7     9     7

ia = 2×1

     5
     1

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

Задайте 'stable' или 'sorted' когда порядок значений в C важны.

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

     3     1     5

ia = 3×1

     1
     4
     5

В качестве альтернативы можно задать 'sorted' порядок.

 [C,ia] = setdiff(A,B,'sorted')
C = 1×3

     1     3     5

ia = 3×1

     4
     1
     5

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

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

Найдите разность множеств A и B.

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

   NaN   NaN

setdiff обработки NaN значения как отличные.

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

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

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

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

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

[C,ia] = setdiff(A,B)
C = 1x2 cell array
    {'dog'}    {'fish'}

ia = 2×1

     1
     3

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

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

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

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

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

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

C = setdiff(A,B)
C = 2x1 cell array
    {'fox'}
    {'pig'}

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

class(C)
ans = 
'cell'

Используйте 'legacy' отметьте, чтобы сохранить поведение setdiff от R2012b и предшествующих релизов в вашем коде.

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

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

     1     3     5

ia1 = 3×1

     4
     1
     5

Найдите различие A и B, и сохраните устаревшее поведение.

[C2,ia2] = setdiff(A,B,'legacy')
C2 = 1×3

     1     3     5

ia2 = 1×3

     7     1     5

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

свернуть все

Входные массивы, заданные как числовые массивы, логические массивы, символьные массивы, строковые массивы, категориальные массивы, массивы datetime, массивы длительности, массивы ячеек из символьных векторов, таблицы или расписания. Если вы задаете '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 = setdiff([4 1 3 2 5],[2 1],'sorted')
C =

     3     4     5

'stable'

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

Пример

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

     4     3     5

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

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

свернуть все

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

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

  • Если 'rows' флаг не задан и A вектор-строка, затем C вектор-строка.

  • Если 'rows' флаг не задан и A не вектор-строка, затем C вектор-столбец.

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

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

Класс C совпадает с классом A, если:

  • A символьный массив и B массив ячеек из символьных векторов, в этом случае C массив ячеек из символьных векторов.

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

  • A массив ячеек из символьных векторов или односимвольный вектор и B массив datetime, в этом случае C массив datetime.

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

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

Советы

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

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

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