How to change duplicate values, so that every value is unique

조회 수: 3 (최근 30일)
Richard Wolvers
Richard Wolvers 2017년 6월 13일
댓글: Richard Wolvers 2017년 6월 13일
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
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
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
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;

카테고리

Help CenterFile Exchange에서 Install Products에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by