Matlab заменить значение на ноль из матрицы

#matlab #matrix #replace

#matlab #матрица #заменить

Вопрос:

I матрица

 A = [123   123   123    99    99    99    32    32    32    40
      40    40    22    22    34    34    34   152   152   152
      92    92    92    91    91    91   146   146   146   119
       3     3    96    96    96   136   136   136    68    68
     ]
B = [40 68 119]
  

Как я могу заменить нулевым значением из A, которое имеет то же значение, что и B. требуемый результат:

 C = [123   123   123    99    99    99    32    32    32     0
       0     0    22    22    34    34    34   152   152   152
      92    92    92    91    91    91   146   146   146     0
       3     3    96    96    96   136   136   136     0     0
     ]
  

Спасибо…

Ответ №1:

Используйте ismember для получения логической маски значений A , которые находятся в B , а затем используйте это как логический индекс, чтобы сделать эти записи нулевыми:

 C = A; % define C equal to A
C(ismember(A,B)) = 0; % make elements from B equal to 0
  

Или, в одной строке: умножьте A на маску, которая равна 1 для элементов, которых нет в B и 0 для элементов в B :

 C = A.*~ismember(A,B); % multiply A by a mask to make elements from B equal to 0
  

Ответ №2:

Я бы начал с этого пути:

 C = A;
for i = 1:numel(B)
    C(C == B(i)) = 0;
end
  

Третья строка использует логическую индексацию — C == 20 это логическая матрица, значение true, где элемент равен 20, false в противном случае, и C(C == 20) = 0 устанавливает значение true для элементов 0 .