ismember

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

Описание

пример

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).

The '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 и предыдущих релизов, использующих любой из входных параметров в предыдущих синтаксисах.

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

Примеры

свернуть все

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

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. The 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, массив длительности, массив ячеек из векторов символов, таблица или timetable. Если вы задаете '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, массив длительности, массив ячеек из векторов символов, таблица или timetable. Если вы задаете '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 для сравнения чисел с плавающей запятой с помощью допуска.

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

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

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