2015-02-05 95 views
1

下面的代码删除重复值删除重复的阵列,但保留第一次出现

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 

如何去适应它,那第一 occurence任何重复的仍然是?

即输出将是

numarr = 

    1  2  3  4 
+2

尝试MATLAB的'unique'功能。 – Raab70 2015-02-05 18:32:18

回答

2

使用unique'stable'属性:

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

将保持秩序,因此保持第一 occurrance每个值的, 如预期的。

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 
+0

不错......我忘了提及......是否有可能检索删除重复项的索引(即它们在删除之前的位置索引*)? – embert 2015-02-05 18:44:06

+0

@embert当然,看看我的编辑 – thewaywewalk 2015-02-05 18:48:28

+0

这我*不*已经想出了我自己 – embert 2015-02-05 18:50:24

相关问题