Ответ 1
Я бы использовал Afilt=A(~ismember(A,B));
. Это вернет все элементы A
, которые не находятся в B
.
У меня есть вектор-столбец:
A = [1; 2; 3; 4; 4; 5; 5; 7];
Я хочу исключить элементы A
, которые находятся во второй матрице B
:
B = [4; 5]
Конечный результат должен быть:
A = [1; 2; 3; 7]
Я уверен, что с использованием элегантного синтаксиса MATLAB это достигается без написания цикла for
, но не уверен, как?
Я бы использовал Afilt=A(~ismember(A,B));
. Это вернет все элементы A
, которые не находятся в B
.
Вы можете сравнить значения с bsxfun
:
A = A(all(bsxfun(@ne, A(:), B(:).'), 2))
Этот подход особенно хорош, если вам нужно обрабатывать числа с плавающей запятой (где ismember
не работает):
A(all(abs(bsxfun(@minus, A(:), B(:).')) >= eps, 2))
Вместо eps
вы можете установить любое допустимое пороговое значение.
EDIT: Если вы хотите удалить строки 4 и 5, это означает, что если вы хотите удалить строки с четырьмя и пятью секундами, проверьте другие ответы.
Просто, поскольку это
A = [1; 2; 3; 4; 4; 5; 5; 7];
B = [4; 5];
A(B)=[];