How to replace repeating no.s in an array by distinct no.?
    3 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Abdul Gaffar
 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
      
      
 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?
Respuesta aceptada
  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)
0 comentarios
Más respuestas (2)
  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.
0 comentarios
Ver también
Categorías
				Más información sobre Cell Arrays 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!


