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

2 visualizaciones (últimos 30 días)
Abdul Gaffar
Abdul Gaffar el 3 de Nov. de 2017
Editada: Guillaume el 3 de Nov. de 2017
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 comentario
Guillaume
Guillaume el 3 de Nov. de 2017
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?

Iniciar sesión para comentar.

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 3 de Nov. de 2017
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)

Más respuestas (2)

KSSV
KSSV el 3 de Nov. de 2017
Editada: KSSV el 3 de Nov. de 2017
A = randperm(10) ;

Guillaume
Guillaume el 3 de Nov. de 2017
Editada: Guillaume el 3 de Nov. de 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.

Categorías

Más información sobre Search Path 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!

Translated by