删除数组中的重复项但保留第一次出现

Delete duplicates in array but keep first occurrence

以下代码删除重复值

numarr = [1 2 2 3 3 3 4 4 4 4];
%// Filter doubled values
[n_, bin]       = histc(numarr, unique(numarr));
multiple_       = find(n_ > 1);
mult_indices_   = ismember(bin, multiple_);

numarr(mult_indices_) = [];

%// output     
numarr =  1

如何调整它,让第一次出现任何重复项仍然存在?

即输出将是

numarr =

     1     2     3     4

使用 unique'stable' 属性:

a = [1 3 2 5 2 7 1 3 4 5 6 8 2];
output = unique(a,'stable')

这将保持顺序,因此会根据需要保持每个值的 第一个 出现。

output =

     1     3     2     5     7     4     6     8

没有 'stable' 输出被排序。


关于您的评论:要获取删除的重复项的索引,您需要 uniquesetdiff 的第二个输出:

[output, kept_idx] = unique(a,'stable')
removed_idx = setdiff(1:numel(a),kept_idx)

removed_idx =

     5     7     8    10    13