删除数组中的重复项但保留第一次出现
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'
输出被排序。
关于您的评论:要获取删除的重复项的索引,您需要 unique
和 setdiff
的第二个输出:
[output, kept_idx] = unique(a,'stable')
removed_idx = setdiff(1:numel(a),kept_idx)
removed_idx =
5 7 8 10 13
以下代码删除重复值
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'
输出被排序。
关于您的评论:要获取删除的重复项的索引,您需要 unique
和 setdiff
的第二个输出:
[output, kept_idx] = unique(a,'stable')
removed_idx = setdiff(1:numel(a),kept_idx)
removed_idx =
5 7 8 10 13