如何在Matlab中删除有序双精度数组中的元素子集

t1qtbnec  于 2022-12-13  发布在  Matlab
关注(0)|答案(1)|浏览(146)

如何在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个数组中的基本顺序。

cs7cruho

cs7cruho1#

以下是几种方法:
1.使用ismember创建逻辑索引:

A_a = A(~ismember(A, a))

2.将A和a视为集合,并使用setdiff

A_a = setdiff(A, a)</del>
  • EDIT:请注意,正如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

相关问题