我有一个列向量:
A = [1; 2; 3; 4; 4; 5; 5; 7];
我希望排除第二个矩阵A
中B
的元素:
B = [4; 5]
最终结果应为:
A = [1; 2; 3; 7]
我非常确定使用MATLAB优雅的语法,这可以在不编写for
循环的情况下完成,但不确定如何?
答案 0 :(得分:20)
我会使用Afilt=A(~ismember(A,B));
。这将返回A
中不在B
内的所有{{1}}元素。
答案 1 :(得分:6)
您可以将值与bsxfun
进行比较:
A = A(all(bsxfun(@ne, A(:), B(:).'), 2))
如果你需要处理浮点数(ismember
失败的话),这种方法特别好:
A(all(abs(bsxfun(@minus, A(:), B(:).')) >= eps, 2))
您可以设置所需的任何容差阈值,而不是eps
。
答案 2 :(得分:2)
编辑:如果要删除第4行和第5行,如果要删除带有四个和五个行的行,请检查其他答案。
这很简单
A = [1; 2; 3; 4; 4; 5; 5; 7];
B = [4; 5];
A(B)=[];