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