exponenta event banner

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

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

Примеры

свернуть все

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

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, массив duration, массив ячеек векторов символов, таблица или расписание. При указании '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, массив duration, массив ячеек векторов символов, таблица или расписание. При указании '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