How to change duplicate values, so that every value is unique
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Richard Wolvers
el 13 de Jun. de 2017
Comentada: Richard Wolvers
el 13 de Jun. de 2017
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 comentario
David Goodmanson
el 13 de Jun. de 2017
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.
Respuesta aceptada
Walter Roberson
el 13 de Jun. de 2017
[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
Más respuestas (1)
Andrei Bobrov
el 13 de Jun. de 2017
Editada: Andrei Bobrov
el 13 de Jun. de 2017
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 comentarios
Ver también
Categorías
Más información sobre Install Products en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!