如何在Matlab中从双精度数组中删除元素的子集?数组是有序的,并且是一维的。例如,给定
A=[1,3,5,6,7]; a=[3,6];
渴望
A_a=[1,5,7];
如果a是标量的,我可以做A_a=A(A~=a)。如果a不是标量的,它是如何工作的?我对围绕A_a=A(A~=a(i))的简单循环的担心是,表面上看,对于每个元素a(i),都会对A中的每个元素进行比较,这忽略了2个数组中的基本顺序。
a
A_a=A(A~=a)
A_a=A(A~=a(i))
a(i)
A
cs7cruho1#
以下是几种方法:1.使用ismember创建逻辑索引:
ismember
A_a = A(~ismember(A, a))
2.将A和a视为集合,并使用setdiff
setdiff
A_a = setdiff(A, a)</del>
3.使用arrayfun生成逻辑索引
arrayfun
A_a = A(arrayfun(@(x)~any(x==a), A))
4.良好的老式for循环
A_a = [] for element = A if ~any(a == element) A_a(end+1) = element ; end end
1条答案
按热度按时间cs7cruho1#
以下是几种方法:
1.使用
ismember
创建逻辑索引:2.将A和a视为集合,并使用
setdiff
3.使用
arrayfun
生成逻辑索引4.良好的老式for循环