How to change duplicate values, so that every value is unique
13 次查看(过去 30 天)
显示 更早的评论
Hello everyone,
At this moment i am stuck with the following problem. I want to change the values of duplicate values, so every value is unique. While it is not allowed to change the position of these numbers in the matrix. Below is the starting matrix.
a = [10 20 20 30 20 30 40]';
And the desired output would be this:
b = [10 20 20.01 30 20.02 30.01 40]';
Thanks in advance!
1 个评论
David Goodmanson
2017-6-13
Hi Richard, Take a look at the 'unique' function. After you have the unique values you can see how many times each one occurs and change the extra ones.
采纳的回答
Walter Roberson
2017-6-13
[uvals, ~, uidx] = unique(a, 'stable');
b = a; %mostly to copy the class and size
for K = 1 : length(uvals)
mask = uidx == K;
b(mask) = uvals(K) + (0 : nnz(mask) - 1) * 0.01;
end
更多回答(1 个)
Andrei Bobrov
2017-6-13
编辑:Andrei Bobrov
2017-6-13
a = [10 20 20 30 20 30 40]';
[~,ii] = sort(a);
[~,~,c] = unique(a);
jj = cell2mat(accumarray(c,.1*ones(numel(a),1),[],@(x){cumsum(x)}));
out = jj(ii)-.1 + a;
or
a = [10 20 20 30 20 30 40]';
t = a == unique(a)'; % for MATLAB <= R2016a: t = bsxfun(@eq,a(:),unique(a)');
out = sum(cumsum(.1*t).*t,2)-.1 + a;
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Numeric Types 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!