How to replace repeating no.s in an array by distinct no.?

Let n=10 Consider array A={7,6,3,5,3,6,6,2,9,6} Algorithm: replace the repeating no. by its maximum unused value & I want all no.s between 1 & 10. How can it be done??

1 commentaire

I'm assuming that
A = [7,6,3,5,3,6,6,2,9,6]
i.e. it is a regular matrix, not a cell array as you've written.
What do you want as an output?

Connectez-vous pour commenter.

 Réponse acceptée

A=[7,6,3,5,3,6,6,2,9,6]
[a,b] = unique(A,'first');
out = zeros(10,1);
out(b) = a;
out(out==0) = setdiff(1:10,a)

Plus de réponses (2)

Guillaume
Guillaume le 3 Nov 2017
Modifié(e) : Guillaume le 3 Nov 2017
If I understood correctly:
A = [7,6,3,5,3,6,6,2,9,6]
[~, ~, subs] = unique(A);
idxtoreplace = accumarray(subs, (1:numel(A))', [], @(idx) {idx(2:end)});
idxtoreplace = vertcat(idxtoreplace{:});
replacementvals = setdiff(1:numel(A), A);
A(idxtoreplace) = replacementvals(1:numel(idxtoreplace));
Note that which of the duplicate gets replaced and by which value may change with matlab versions, but you're guaranteed that all but 1 of the duplicated values is replaced by an unused value.

Community Treasure Hunt

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

Start Hunting!

Translated by