Shuffle matrix elements
    35 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hey guys, I want to shuffle a 3x3 matrix (which consist elements within 1:9 unrepeated). So that I have written a very strange code.
>>X=perms(1:9);
Execute above line once.
Then execute below line how many shuffled matrices you want.
>>SMx=reshape(X(randi(size(X,1)),:),3,3)
Is there any better way to do this?
0 Commenti
Risposta accettata
  Jan
      
      
 il 3 Nov 2011
        SMx = reshape(randperm(9), 3, 3);
If you have Matlab 2011b, use "randperm(9, 9)" instead: It uses the Fisher-Yates-Shuffle, which is much faster. And if you struggle with large arrays, this is even faster: FEX: Shuffle.
0 Commenti
Più risposte (2)
  Fangjun Jiang
      
      
 il 3 Nov 2011
        I believe it means to be randperm(), not perms().
OrigData=magic(3);
X=randperm(numel(OrigData));
ShuffledData=reshape(OrigData(X),size(OrigData))
1 Commento
  Jan
      
      
 il 3 Nov 2011
				PERMS is correct: Raviteja produces *all* permutations at first and chooses a specific one afterwards. This needs a lot of memory... 
  Amgad Mohsen
 il 9 Ago 2012
        A function file as I did with out randperm()
function W = randomize(A)
[m,n] = size(A);
E = A(:);
W(1) = E(1);
E(1) =[];
N = m*n;
while length(E) > 0
    K = length(W);
    RandInd = randi(length(E),1);
    for j = 1: K 
       P(j) =  E(RandInd) ~= W(j); 
    end
    if all(P) 
    W =[W,E(RandInd)];
    E(RandInd) =[];
    end
end  
W = reshape(W,m,n);
0 Commenti
Vedere anche
Categorie
				Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



