exponenta event banner

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, массивы duration, таблицы или расписания.

Примеры

свернуть все

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

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
    {'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
    {'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, массивы 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 = 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 является вектором-столбцом.

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

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

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