ismember

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

Описание

пример

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

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

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

'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 ложь).

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

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

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

| | | | | | |

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