ismember

Элементы массива, которые являются членами массива набора

Синтаксис

Lia = ismember(A,B)
Lia = ismember(A,B,'rows')
[Lia,Locb] = ismember(___)
[Lia,Locb] = ismember(___,'legacy')

Описание

пример

Lia = ismember(A,B) возвращает массив, содержащий логический 1 (true), где данные в A найдены в B. В другом месте массив содержит логический 0 (false).

  • Если A и B являются таблицами или расписаниями, то ismember возвращает логическое значение для каждой строки. Для расписаний ismember принимает времена строки во внимание, чтобы определить равенство. Вывод, Lia, является вектор-столбцом.

Lia = ismember(A,B,'rows') обработки каждая строка A и каждая строка B как одна сущности и возвращают вектор-столбец, содержащий логический 1 (true), где строки A являются также строками B. В другом месте массив содержит логический 0 (false).

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

пример

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

  • Обычно Locb содержит самый низкий индекс в B для каждого значения в A, который является членом B. Значения 0 указывают, где A не является членом B.

  • Если опция 'rows' задана, то Locb содержит самый низкий индекс в B для каждой строки в A, который является также строкой в B. Значения 0 указывают, где A не является строкой B.

  • Если A и B являются таблицами или расписаниями, то Locb содержит самый низкий индекс в B для каждой строки в A, который является также строкой в B. Значения 0 указывают, где A не является строкой B.

пример

[Lia,Locb] = ismember(___,'legacy') сохраняет поведение функции ismember от R2012b и предшествующих релизов с помощью любого из входных параметров в предыдущих синтаксисах.

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

Примеры

свернуть все

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

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

Определите, какие элементы A находятся также в B.

Lia = ismember(A,B)
Lia = 1x4 logical array

   0   0   1   1

A(3) и A(4) найдены в B.

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

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.

Lia = ismember(A,B)
Lia = 5x1 logical array

   1
   0
   1
   0
   1

A(1,:), A(3,:) и A(5,:) найдены в B.

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

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

Определите, какие элементы A находятся также в B, а также их соответствующих местоположениях в B.

[Lia,Locb] = ismember(A,B)
Lia = 1x4 logical array

   0   0   1   1

Locb = 1×4

     0     0     2     1

Самым низким индексом к A(3) является B(2), и A(4) найден в B(1).

Создайте векторный x. Получите второй векторный y путем преобразования и непреобразования x. Это преобразование вводит различия в округлении в y.

x = (1:6)'*pi;
y = 10.^log10(x);

Проверьте, что x и y не идентичны путем взятия различия.

x-y
ans = 6×1
10-14 ×

    0.0444
         0
         0
         0
         0
   -0.3553

Используйте ismember, чтобы найти элементы x, которые находятся в y. Функция ismember выполняет точные сравнения и решает, что некоторые элементы матрицы в x не являются членами y.

lia = ismember(x,y)
lia = 6x1 logical array

   0
   1
   1
   1
   1
   0

Используйте ismembertol, чтобы выполнить сравнение с помощью маленького допуска. ismembertol обрабатывает элементы, которые являются в допуске как равный, и решает, что все элементы в x являются членами y.

LIA = ismembertol(x,y)
LIA = 6x1 logical array

   1
   1
   1
   1
   1
   1

Составьте таблицу, 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(['M';'F';'F';'F'],[47;31;35;23],[68;64;62;58],...
'VariableNames',{'Gender' 'Age' 'Height'},...
'RowNames',{'Joe' 'Meg' 'Beth' 'Amy'})
B=4×3 table
            Gender    Age    Height
            ______    ___    ______

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

Определите, какие строки A находятся также в B, а также их соответствующих местоположениях в B.

[Lia,Locb] = ismember(A,B)
Lia = 5x1 logical array

   0
   0
   1
   0
   0

Locb = 5×1

     0
     0
     2
     0
     0

Две строки, которые имеют те же значения, но различные имена, рассматриваются равными. Те же данные для Betty найдены в B(2,:), который соответствует Meg.

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

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

Определите, какие строки A находятся также в B, а также их соответствующих местоположениях в B.

[Lia, Locb] = ismember(A,B, 'rows')
Lia = 2x1 logical array

   0
   1

Locb = 2×1

     0
     1

Самым низким индексом к A(2,:) является B(1,:).

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

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

Определите, какие элементы A находятся также в B, а также их соответствующих местоположениях в B.

[Lia,Locb] = ismember(A,B)
Lia = 1x3 logical array

   1   0   0

Locb = 1×3

     1     0     0

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

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

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

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

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

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

[Lia,Locb] = ismember(A,B)
Lia = 1x4 logical array

   0   1   0   1

Locb = 1×4

     0     2     0     4

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

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

A = ['cat';'dog';'fox';'pig'];
B = {'dog','cat','fish','horse'};

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

[Lia,Locb] = ismember(A,B)
Lia = 4x1 logical array

   1
   1
   0
   0

Locb = 4×1

     2
     1
     0
     0

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

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

A = [5 3 4 2]; 
B = [2 4 4 4 6 8];
[Lia1,Locb1] = ismember(A,B)
Lia1 = 1x4 logical array

   0   0   1   1

Locb1 = 1×4

     0     0     2     1

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

[Lia2,Locb2] = ismember(A,B,'legacy')
Lia2 = 1x4 logical array

   0   0   1   1

Locb2 = 1×4

     0     0     4     1

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

свернуть все

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

A должен принадлежать тому же классу как B за следующими исключениями:

  • logical, char и все числовые классы могут объединиться с массивами double.

  • Массивы ячеек из символьных векторов могут объединиться с символьными массивами или строковыми массивами.

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

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

Существуют дополнительные требования для A и B на основе типа данных:

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

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

  • Если A и B являются массивами datetime, они должны быть сопоставимы друг с другом в том, задают ли они часовой пояс.

Для текстовых входных параметров ismember обычно не игнорирует конечные пробелы в векторах символов, массивах ячеек из символьных векторов и строковых массивах. Однако существует несколько случаев, когда ismember действительно игнорирует конечные пробелы:

  • Если A является символьным массивом, и B является массивом ячеек из символьных векторов, то ismember игнорирует конечные пробелы в символьном массиве.

  • Когда опция 'rows' задана, ismember игнорирует конечные пробелы в векторах символов и символьных массивах.

A также может быть объектом со следующими методами класса:

  • sort (или sortrows для опции 'rows')

  • eq

  • ne

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

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

B должен принадлежать тому же классу как A за следующими исключениями:

  • logical, char и все числовые классы могут объединиться с массивами double.

  • Массивы ячеек из символьных векторов могут объединиться с символьными массивами или строковыми массивами.

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

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

Существуют дополнительные требования для A и B на основе типа данных:

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

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

  • Если A и B являются массивами datetime, они должны быть сопоставимы друг с другом в том, задают ли они часовой пояс.

Для текстовых входных параметров ismember обычно не игнорирует конечные пробелы в векторах символов, массивах ячеек из символьных векторов и строковых массивах. Однако существует несколько случаев, когда ismember действительно игнорирует конечные пробелы:

  • Если A является символьным массивом, и B является массивом ячеек из символьных векторов, то ismember игнорирует конечные пробелы в символьном массиве.

  • Когда опция 'rows' задана, ismember игнорирует конечные пробелы в векторах символов и символьных массивах.

B также может быть объектом со следующими методами класса:

  • sort (или sortrows для опции 'rows')

  • eq

  • ne

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

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

свернуть все

Логический индекс к A, возвращенному как вектор, матрица или массив N-D, содержащий логический 1 (true) везде, где значения (или строки) в A являются членами B. В другом месте это содержит логический 0 (false).

Lia является массивом, одного размера как A, если вы не задаете флаг 'rows'.

Если флаг 'rows' задан или если A является таблицей или расписанием, Lia является вектор-столбцом с одинаковым числом строк как A.

Местоположения в B, возвращенном как вектор, матрица или массив N-D. Если флаг 'legacy' не задан, Locb содержит самые низкие индексы к значениям (или строки) в B, которые найдены в A. Значения 0 указывают, где A не является членом B.

Locb является массивом, одного размера как A, если вы не задаете флаг 'rows'.

Если флаг 'rows' задан или если A является таблицей или расписанием, Locb является вектор-столбцом с одинаковым числом строк как A.

Советы

  • Используйте ismembertol, чтобы выполнить сравнения между числами с плавающей запятой с помощью допуска.

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

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

Смотрите также

| | | | | | |

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