如何在 Matlab 中从 double 组中删除元素子集?数组是有序的并且是一维的。
例如,给定
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 个数组中的基本顺序。
最佳答案
这里有几种方法可以做到这一点:
1.使用 ismember
创建逻辑索引:
A_a = A(~ismember(A, a))
2.将 A 和 a 视为集合,并使用 setdiff
A_a = setdiff(A, a)</del>
- 编辑:请注意,如 Luis Mendo指出,这也会删除 A 中的重复值,这可能是不可取的。
3.使用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
关于matlab - 如何在 Matlab 中从有序 double 组中删除元素子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74761619/