首页 > 解决方案 > 从数组中删除元素

问题描述

问题:

我有两个数组AB

A = [0, 1, 2, 3]; %A will always be from 0 to N where N in this case is 3.

B = [0, 1, 3,   1, 9, 4, 6,    2, 5, 9, 10, 11,   3, 8, 1, 5, 9, 10]; 

weights_B = [3, 4, 5, 6]; 

我想将 的第一个元素与A的第一个3元素进行比较B,将 的第二个元素与A的下一个4元素进行比较B。如果 的元素A相等,我将其从 中删除B。所以在例子中:

 if (A(1) == B(1:3))
 remove A(1) from B 

相似地,

我想与ieA(2)的下一个4元素进行比较:BB(4:7)

if (A(2) == B(4:7))
remove A(2) from B 

我想与ieA(3)的下一个5元素进行比较BB(8:12)

if (A(3) == B(8:12))
remove A(3) from B 

我想与ieA(4)的下一个6元素进行比较BB(13:18)

if (A(4) == B(13:18))
remove A(4) from B 

注意:数组决定了应该分别比较weights_B的元素个数BA(1), A(2), .. , A(4)

所以到底B应该具备以下要素:

  B = [1, 3, 9, 4, 6, 5, 9, 10, 11, 8, 1, 5, 9, 10]; 

需要的解决方案:

有什么方法可以做到这一点而不必对索引进行硬编码?

标签: arraysmatlabindexingelementsindices

解决方案


这是一种没有硬编码的方法:

Bw = mat2cell(B, 1, weights_B); % split into chunks
result = cell(size(Bw)); % initiallize result
for k = 1: numel(A)
    result{k} = Bw{k}(Bw{k}~=A(k)); % fill each chunk of the result
end
result = [result{:}]; % concatenate into a row vector

推荐阅读