【问题标题】:Exclude elements from array [duplicate]从数组中排除元素[重复]
【发布时间】:2013-05-29 14:30:55
【问题描述】:

我有一个列向量:

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

我希望排除在第二个矩阵B 中的A 的元素:

B = [4; 5]

最终结果应该是:

A = [1; 2; 3; 7]

我很确定使用 MATLAB 优雅的语法,这可以在不编写 for 循环的情况下完成,但不知道如何?

【问题讨论】:

标签: matlab vector


【解决方案1】:

我会使用Afilt=A(~ismember(A,B));。这将返回A 中不在B 中的所有元素。

【讨论】:

  • 或者:A(ismember(A,B))=[];
【解决方案2】:

你可以用bsxfun比较值:

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

如果您需要处理浮点数(其中ismember 失败),这种方法特别好:

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

除了eps,您可以设置任何所需的容差阈值。

【讨论】:

  • 如果要保留订单,请使用setOrder= 'stable' 作为附加输入
  • 使用 setdiff 你会丢失元素的多样性。
  • @MohsenNosratinia 完全正确,没想到。
【解决方案3】:

编辑:如果你想删除第 4 行和第 5 行,就是这样,如果你想删除四行和五行,请检查其他答案。

就这么简单

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

A(B)=[];

【讨论】:

  • 我认为你的问题错了(就像我做的那样)。您应该删除值 4 和 5,而不是第 4 行和第 5 行。
  • @EitanT 我已经进行了相应的编辑。不确定我们是否误读或是否添加了信息。
  • 我认为我们被问题的措辞误导了。
猜你喜欢
  • 2021-10-01
  • 2013-05-20
  • 2011-07-03
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多