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

Arg*_*yll 2 matlab

如何在Matlab中从双精度数组中删除元素子集?数组是有序的并且是一维的。

\n

例如,给定

\n
A=[1,3,5,6,7];\na=[3,6];\n
Run Code Online (Sandbox Code Playgroud)\n

欲望

\n
A_a=[1,5,7];\n
Run Code Online (Sandbox Code Playgroud)\n

如果a是标量,我可以做A_a=A(A~=a)a如果不是标量,它如何工作?

\n

我对 na\xc3\xafve 循环的担忧A_a=A(A~=a(i))是,似乎对于每个元素a(i),都会对 中的每个元素进行比较A,这忽略了两个数组中的基本顺序。

\n

Bri*_*ius 5


以下是执行此操作的几种方法:

1.用于ismember创建逻辑索引:

A_a = A(~ismember(A, a))
Run Code Online (Sandbox Code Playgroud)

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

A_a = setdiff(A, a)</del>
Run Code Online (Sandbox Code Playgroud)
  • 编辑:请注意,正如Luis Mendo指出的那样,这也会删除 A 中的重复值,这可能是不可取的。

3. 用于arrayfun生成逻辑索引

A_a = A(arrayfun(@(x)~any(x==a), A))
Run Code Online (Sandbox Code Playgroud)

4. 好的老式 for 循环

A_a = []
for element = A
    if ~any(a == element)
        A_a(end+1) = element ;
    end
end
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“setdiff”还将删除“A”中的重复项 (3认同)