how to avoid repeat numbers in a row
    4 views (last 30 days)
  
       Show older comments
    
Dear All,
I have this row
A=[1 2 3 4 5 6];
I tried to find random permutation on the vector but in many cases I got a row with repetition numbers for example
    z=[1 5 2 4 1 5];or z=[1 5 2 4 1 1];
I want to avoid the repetition in this code but it is totally wrong, at first I should assign the missing numbers in such way, here is [3 6].
zc=[3 6 ];
 e=size(zc,2);
   z=[1 5 2 4 1 5];
for i=1:6
    z(i)==z
  s = find((z(i)==z) == 1)
 ss=size(s,2);
 for j=2:ss  
   for   k=1:e
      z(j)=zc(k)
      end
    end
end
I don't want to use a function from matlab to get the permutation, I need to fix my row or any permutation exchange file like (perm file ). If anyone help me for it and save me I will be grateful.
regards,
Imola
2 Comments
  Guillaume
      
      
 on 19 Mar 2015
				I don't want to use a function from matlab to get the permutation:
Does that mean that you've written your own uniform number generator? Otherwise, at some point you'll have to use rand, so you just might as well use randperm.
Accepted Answer
More Answers (1)
  Guillaume
      
      
 on 19 Mar 2015
        It seems to me that your effort would be better spent on fixing the code that generate these invalid permutation rather than fixing the permutation afterward.
Anyway, one way to do what you want:
z = [1 5 2 4 1 1];
zc = [3 6];
%build a cell array containing the indices of repeated values:
repindices = accumarray(z', 1:numel(z), [], @(v) {v(2:end)'})'; 
%convert cell array into vector:
repindices = [repindices{:}];
%replace values at indices by replacement:
z(repindices) = zc
See Also
Categories
				Find more on Creating and Concatenating Matrices in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!