Исключить элементы из массива

У меня есть вектор-столбец:

A = [1; 2; 3; 4; 4; 5; 5; 7]; 

Я хочу исключить элементы A, которые находятся во второй матрице B:

B = [4; 5]

Конечный результат должен быть:

A = [1; 2; 3; 7]

Я уверен, что с использованием элегантного синтаксиса MATLAB это достигается без написания цикла for, но не уверен, как?

Ответ 1

Я бы использовал Afilt=A(~ismember(A,B));. Это вернет все элементы A, которые не находятся в B.

Ответ 2

Вы можете сравнить значения с bsxfun:

A = A(all(bsxfun(@ne, A(:), B(:).'), 2))

Этот подход особенно хорош, если вам нужно обрабатывать числа с плавающей запятой (где ismember не работает):

A(all(abs(bsxfun(@minus, A(:), B(:).')) >= eps, 2))

Вместо eps вы можете установить любое допустимое пороговое значение.

Ответ 3

EDIT: Если вы хотите удалить строки 4 и 5, это означает, что если вы хотите удалить строки с четырьмя и пятью секундами, проверьте другие ответы.

Просто, поскольку это

A = [1; 2; 3; 4; 4; 5; 5; 7];     
B = [4; 5];

A(B)=[];