Есть ли способ маскировать матрицу в Matlab на основе элементов в массиве? - PullRequest
0 голосов
/ 29 июня 2018

Предположим, у меня есть матрица a = [1,2,3;4,1,2;3,4,2].

Мне нужно создать логическую матрицу, которая будет 1 везде, где есть элемент b в a. Эквивалент a==4 | a==1, если мой массив b такой маленький, как [1,4].

Я знаю один способ сделать это:

b = [1,4];
c = logical(zeros(size(a)));
for i=b
    c = c | a==i;
end

Это решение может плохо масштабироваться, если a и b велики. Есть ли более чистый способ сделать это для больших массивов?

Я надеялся, что a == b даст мне то, что я хотел, но это не так.

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете использовать ismember для вывода логического массива, который имеет значение true, когда элемент первого ввода является членом второго ввода. Вывод имеет тот же размер, что и первый вход.

c = ismember( a, b );

В вашем примере:

a = [1,2,3;
     4,1,2;
     3,4,2];
b = [1,4];
c = ismember( a, b );
% >> c = 
%    [1,0,0;
%     1,1,0;
%     0,1,0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...