How do I repetitively shuffle elements in my matrix column-wise?

6 Ansichten (letzte 30 Tage)
Hello everyone,
I am new to MATLAB and have a question about how to randomly shuffle elements in a matrix column-wise. Specifically, I have a 582x255 matrix and I would like to shuffle the elements. However, it is important that the elements of one column stay in the same column, so a column-wise shuffle and that the every column is shuffled in a different way (so that the elements in one row are not all shuffled to the same row). So far, this is what I have come up with:
[m,n]=size(F); % F = 582x255 matrix
nb_rows = n; %number of rows
C_1 = F(:,1); % select first column of matrix
C_1_s = C_1(randperm(length(C_1))); % randomly shuffle the elements of that column
This works. However, I would like to find a way to do it automatically for every column. I think I would need to create a loop that does the same thing column per column, so I have tried this:
for i=1:nb_rows;
C_i = F(i,1);
C_i_s = C_i(randperm(length(C_i)));
end
But it doesn't seem to work.
I would greatly appreciate it if someone could help me with this!

Akzeptierte Antwort

Matt J
Matt J am 8 Jan. 2024
Bearbeitet: Matt J am 8 Jan. 2024
F=magic(5)
F = 5×5
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
[m,n]=size(F);
[~,I]=sort(rand([m,n]));
J=repmat(1:n,m,1);
Fshuffle = F(sub2ind([m,n],I,J))
Fshuffle = 5×5
17 6 7 2 3 11 5 25 14 16 4 24 1 21 9 10 18 13 20 22 23 12 19 8 15
  6 Kommentare
Joyce Oerlemans
Joyce Oerlemans am 10 Jan. 2024
That works perfectly, thank you very much! I have one last question: is there a way to repeat this loop a 100 times so that I get 100 variables each which a different shuffle of the matrix?
Matt J
Matt J am 10 Jan. 2024
Bearbeitet: Matt J am 10 Jan. 2024
That works perfectly, thank you very much!
You're welcome, but please Accept-click the answer to indicate that it worked.
I have one last question: is there a way to repeat this loop a 100 times so that I get 100 variables each which a different shuffle of the matrix?
As below:
F=magic(5)
F = 5×5
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
[m,n]=size(F);
p=100;
[~,I]=sort(rand([m,n,p]));
J=repmat(1:n,m,1,p);
Fshuffle = F(sub2ind([m,n],I,J))
Fshuffle =
Fshuffle(:,:,1) = 17 12 1 21 22 10 18 19 20 3 4 6 7 2 15 11 24 13 8 9 23 5 25 14 16 Fshuffle(:,:,2) = 11 24 25 2 22 23 6 7 21 3 4 12 1 8 9 10 5 13 20 16 17 18 19 14 15 Fshuffle(:,:,3) = 4 5 13 21 16 17 18 1 14 22 10 12 19 20 15 23 6 7 8 9 11 24 25 2 3 Fshuffle(:,:,4) = 10 12 1 21 16 17 18 19 20 3 23 6 7 14 15 4 24 13 2 22 11 5 25 8 9 Fshuffle(:,:,5) = 4 12 13 14 16 10 5 25 20 15 11 24 7 8 22 17 6 1 21 9 23 18 19 2 3 Fshuffle(:,:,6) = 11 6 7 14 9 23 18 25 20 3 10 24 13 2 16 17 5 19 8 22 4 12 1 21 15 Fshuffle(:,:,7) = 23 18 19 20 3 10 24 7 21 16 4 12 13 14 15 17 6 25 2 22 11 5 1 8 9 Fshuffle(:,:,8) = 4 18 13 21 16 10 5 7 2 15 23 12 19 20 9 17 24 1 14 22 11 6 25 8 3 Fshuffle(:,:,9) = 11 6 25 20 15 17 5 13 14 9 4 12 7 8 3 10 24 1 21 16 23 18 19 2 22 Fshuffle(:,:,10) = 11 5 13 14 15 17 12 7 21 9 4 6 25 8 3 23 24 1 20 16 10 18 19 2 22 Fshuffle(:,:,11) = 23 24 13 20 9 17 6 1 8 3 4 5 7 21 15 10 18 25 2 22 11 12 19 14 16 Fshuffle(:,:,12) = 10 24 13 21 22 4 6 19 8 3 11 5 7 2 16 23 18 1 14 9 17 12 25 20 15 Fshuffle(:,:,13) = 10 5 13 14 15 4 12 25 21 22 11 24 19 8 9 23 6 7 2 16 17 18 1 20 3 Fshuffle(:,:,14) = 17 5 19 8 16 10 18 25 2 22 4 24 13 20 3 23 12 1 21 9 11 6 7 14 15 Fshuffle(:,:,15) = 17 5 19 21 9 23 12 25 20 3 10 6 13 14 15 4 24 7 8 22 11 18 1 2 16 Fshuffle(:,:,16) = 10 12 7 2 15 23 18 19 8 3 11 24 25 21 9 17 6 1 20 16 4 5 13 14 22 Fshuffle(:,:,17) = 17 12 13 8 16 10 18 7 21 9 23 6 1 20 3 4 24 25 2 15 11 5 19 14 22 Fshuffle(:,:,18) = 17 18 1 2 3 4 12 25 14 16 23 6 19 8 22 11 5 7 20 9 10 24 13 21 15 Fshuffle(:,:,19) = 10 18 19 8 15 17 24 7 20 3 4 5 1 21 9 23 6 13 2 16 11 12 25 14 22 Fshuffle(:,:,20) = 23 5 1 20 9 4 6 25 2 3 17 24 7 8 16 11 12 19 14 22 10 18 13 21 15 Fshuffle(:,:,21) = 4 12 7 21 16 17 6 19 2 9 23 5 1 20 15 10 24 13 8 22 11 18 25 14 3 Fshuffle(:,:,22) = 11 6 19 2 15 23 12 25 21 16 4 5 7 8 3 10 18 13 14 9 17 24 1 20 22 Fshuffle(:,:,23) = 23 18 25 20 16 4 5 19 14 15 11 6 13 8 9 10 12 1 2 22 17 24 7 21 3 Fshuffle(:,:,24) = 4 6 19 8 16 10 5 25 2 9 17 18 7 20 22 11 12 13 14 15 23 24 1 21 3 Fshuffle(:,:,25) = 10 12 1 20 3 4 5 13 2 15 23 18 7 14 9 17 24 25 8 16 11 6 19 21 22 Fshuffle(:,:,26) = 11 24 13 8 3 23 6 1 14 22 10 12 25 2 9 4 5 19 21 16 17 18 7 20 15 Fshuffle(:,:,27) = 10 24 19 20 16 23 18 25 21 15 11 5 7 8 22 17 6 1 14 3 4 12 13 2 9 Fshuffle(:,:,28) = 10 12 13 21 16 23 18 19 8 3 17 6 1 2 15 4 5 25 14 9 11 24 7 20 22 Fshuffle(:,:,29) = 17 18 25 20 22 10 6 1 14 16 23 5 19 8 9 11 12 13 2 15 4 24 7 21 3 Fshuffle(:,:,30) = 11 5 13 8 16 23 18 19 2 3 10 12 1 21 9 4 24 7 14 15 17 6 25 20 22 Fshuffle(:,:,31) = 10 24 25 8 15 17 6 13 14 16 4 5 7 21 22 11 12 1 2 3 23 18 19 20 9 Fshuffle(:,:,32) = 17 6 25 8 22 23 24 1 21 16 11 5 7 2 3 4 18 13 20 15 10 12 19 14 9 Fshuffle(:,:,33) = 4 24 7 2 9 11 18 13 8 16 10 12 25 20 3 23 6 1 14 15 17 5 19 21 22 Fshuffle(:,:,34) = 23 12 1 2 16 10 24 13 14 15 4 6 19 20 9 11 18 7 21 22 17 5 25 8 3 Fshuffle(:,:,35) = 11 6 1 21 22 4 5 7 20 9 10 18 13 2 15 23 24 25 14 3 17 12 19 8 16 Fshuffle(:,:,36) = 4 12 7 8 15 23 6 13 20 9 17 24 19 21 3 11 18 25 14 16 10 5 1 2 22 Fshuffle(:,:,37) = 10 12 7 8 22 4 5 13 21 9 17 18 19 2 15 23 6 1 20 16 11 24 25 14 3 Fshuffle(:,:,38) = 17 18 1 21 9 10 5 13 8 22 4 24 25 14 3 23 12 19 2 16 11 6 7 20 15 Fshuffle(:,:,39) = 10 6 13 8 16 4 18 1 20 9 17 12 19 21 22 23 5 7 14 15 11 24 25 2 3 Fshuffle(:,:,40) = 23 5 1 21 15 10 6 19 8 9 11 18 7 14 16 17 12 25 2 22 4 24 13 20 3 Fshuffle(:,:,41) = 4 6 1 8 22 10 18 13 20 15 11 24 19 2 3 23 5 7 21 9 17 12 25 14 16 Fshuffle(:,:,42) = 4 24 1 8 3 10 12 19 21 22 17 18 25 2 9 23 6 7 20 15 11 5 13 14 16 Fshuffle(:,:,43) = 4 6 13 14 9 17 12 19 20 3 23 18 1 2 22 11 5 7 21 16 10 24 25 8 15 Fshuffle(:,:,44) = 4 12 1 8 22 23 24 7 2 9 17 5 13 14 16 10 6 19 21 3 11 18 25 20 15 Fshuffle(:,:,45) = 23 6 25 2 3 17 18 19 20 16 11 24 1 21 22 4 12 7 8 15 10 5 13 14 9 Fshuffle(:,:,46) = 11 5 7 20 3 17 24 19 8 9 10 6 13 2 16 23 18 1 21 22 4 12 25 14 15 Fshuffle(:,:,47) = 23 12 1 2 3 10 6 19 21 15 11 24 25 8 9 17 5 13 20 16 4 18 7 14 22 Fshuffle(:,:,48) = 23 12 7 20 9 10 6 19 21 16 17 24 25 2 22 11 5 13 14 3 4 18 1 8 15 Fshuffle(:,:,49) = 4 5 19 8 22 11 18 25 21 15 23 24 13 2 3 10 12 1 20 16 17 6 7 14 9 Fshuffle(:,:,50) = 11 6 7 20 16 4 12 19 2 9 10 18 25 14 3 17 24 13 21 15 23 5 1 8 22 Fshuffle(:,:,51) = 11 5 7 8 16 4 24 19 21 22 23 18 13 14 3 10 6 1 2 9 17 12 25 20 15 Fshuffle(:,:,52) = 11 5 7 2 15 4 12 1 14 9 17 6 25 8 16 10 18 13 21 22 23 24 19 20 3 Fshuffle(:,:,53) = 23 12 25 21 22 4 5 19 8 16 11 18 1 14 15 17 6 13 2 9 10 24 7 20 3 Fshuffle(:,:,54) = 10 6 7 21 3 4 5 19 20 15 17 24 25 8 16 23 12 1 2 9 11 18 13 14 22 Fshuffle(:,:,55) = 17 18 19 14 3 4 24 13 2 15 10 6 25 21 16 23 12 1 8 22 11 5 7 20 9 Fshuffle(:,:,56) = 23 5 19 14 3 10 6 1 21 16 11 12 25 2 15 4 24 13 8 9 17 18 7 20 22 Fshuffle(:,:,57) = 17 24 13 20 9 11 5 7 21 16 4 18 25 2 15 23 12 1 14 22 10 6 19 8 3 Fshuffle(:,:,58) = 10 12 25 2 3 17 6 19 21 22 11 24 1 8 9 23 5 13 14 16 4 18 7 20 15 Fshuffle(:,:,59) = 4 5 25 8 22 17 6 7 21 3 11 24 1 20 15 10 18 13 2 9 23 12 19 14 16 Fshuffle(:,:,60) = 4 18 13 20 16 23 5 19 21 15 11 12 25 8 9 17 6 7 2 3 10 24 1 14 22 Fshuffle(:,:,61) = 10 18 13 2 9 23 5 1 21 22 17 12 7 8 15 4 6 19 14 3 11 24 25 20 16 Fshuffle(:,:,62) = 17 24 1 2 22 4 12 25 14 3 23 6 7 20 15 10 18 13 8 9 11 5 19 21 16 Fshuffle(:,:,63) = 10 12 25 20 15 11 24 13 8 16 4 5 1 2 22 23 6 19 21 9 17 18 7 14 3 Fshuffle(:,:,64) = 17 18 19 2 9 11 12 25 21 3 4 5 13 14 16 23 6 1 20 15 10 24 7 8 22 Fshuffle(:,:,65) = 10 18 7 8 16 23 5 1 20 22 11 6 25 14 15 4 24 13 2 9 17 12 19 21 3 Fshuffle(:,:,66) = 4 24 1 21 9 10 5 13 8 15 17 6 25 20 3 11 18 7 14 16 23 12 19 2 22 Fshuffle(:,:,67) = 23 5 13 21 16 4 18 19 20 22 17 12 1 8 15 10 6 25 14 9 11 24 7 2 3 Fshuffle(:,:,68) = 11 18 19 20 22 23 5 13 14 9 4 24 25 8 3 10 12 7 21 15 17 6 1 2 16 Fshuffle(:,:,69) = 11 18 7 21 15 17 5 19 2 22 4 12 25 20 16 23 6 13 8 9 10 24 1 14 3 Fshuffle(:,:,70) = 10 5 13 2 9 23 24 25 20 22 17 18 1 14 15 4 12 7 21 3 11 6 19 8 16 Fshuffle(:,:,71) = 11 12 25 21 9 17 6 19 14 15 4 18 13 8 22 23 24 7 2 3 10 5 1 20 16 Fshuffle(:,:,72) = 23 12 7 14 16 11 18 25 2 15 10 6 19 8 22 4 24 1 20 3 17 5 13 21 9 Fshuffle(:,:,73) = 23 6 7 20 16 4 18 25 2 3 11 12 19 14 22 10 24 13 21 9 17 5 1 8 15 Fshuffle(:,:,74) = 11 12 1 2 16 23 24 19 21 15 4 5 25 20 3 17 6 7 14 22 10 18 13 8 9 Fshuffle(:,:,75) = 11 6 1 20 22 10 24 25 21 15 23 18 19 2 9 4 12 13 14 3 17 5 7 8 16 Fshuffle(:,:,76) = 23 5 1 20 9 17 6 7 2 3 10 24 25 21 22 4 18 19 14 15 11 12 13 8 16 Fshuffle(:,:,77) = 4 18 25 2 3 11 5 13 21 16 10 12 7 8 15 17 6 19 14 9 23 24 1 20 22 Fshuffle(:,:,78) = 10 18 19 2 3 11 5 13 21 22 4 12 1 20 15 17 6 25 8 16 23 24 7 14 9 Fshuffle(:,:,79) = 10 6 25 20 3 11 5 7 14 15 23 18 13 8 22 4 24 1 2 16 17 12 19 21 9 Fshuffle(:,:,80) = 11 12 19 2 15 10 24 1 21 3 17 6 7 8 9 4 5 13 20 22 23 18 25 14 16 Fshuffle(:,:,81) = 11 5 13 2 9 17 24 25 8 15 10 12 7 20 3 4 18 19 14 22 23 6 1 21 16 Fshuffle(:,:,82) = 4 24 1 14 9 11 6 13 21 16 23 12 19 8 3 17 5 25 2 22 10 18 7 20 15 Fshuffle(:,:,83) = 17 18 25 20 22 11 6 7 8 15 23 5 19 2 9 10 24 13 14 3 4 12 1 21 16 Fshuffle(:,:,84) = 11 12 19 14 15 10 18 7 21 22 17 24 25 8 16 23 5 13 2 3 4 6 1 20 9 Fshuffle(:,:,85) = 10 24 13 21 3 17 5 7 20 22 4 12 1 2 15 11 6 19 8 16 23 18 25 14 9 Fshuffle(:,:,86) = 11 6 19 8 9 4 24 25 14 3 10 5 13 2 15 23 12 7 20 22 17 18 1 21 16 Fshuffle(:,:,87) = 11 5 13 20 16 23 12 1 2 15 10 18 7 21 3 4 24 25 8 9 17 6 19 14 22 Fshuffle(:,:,88) = 23 12 13 8 9 4 6 1 14 15 10 24 7 2 16 17 18 25 20 3 11 5 19 21 22 Fshuffle(:,:,89) = 4 24 19 20 9 23 5 1 21 22 11 6 7 14 3 10 12 25 2 15 17 18 13 8 16 Fshuffle(:,:,90) = 11 12 19 2 9 10 24 1 8 3 17 5 13 14 16 23 6 7 20 22 4 18 25 21 15 Fshuffle(:,:,91) = 17 6 19 2 9 10 12 25 21 22 23 18 1 14 3 11 24 13 20 15 4 5 7 8 16 Fshuffle(:,:,92) = 10 24 7 8 3 23 12 25 20 15 11 6 1 21 22 17 18 13 2 16 4 5 19 14 9 Fshuffle(:,:,93) = 23 5 19 14 9 17 24 13 8 16 4 6 7 20 15 10 12 25 21 22 11 18 1 2 3 Fshuffle(:,:,94) = 17 5 7 20 15 10 18 13 8 16 23 6 25 14 9 11 24 1 21 3 4 12 19 2 22 Fshuffle(:,:,95) = 11 12 19 21 3 17 5 7 8 16 23 6 1 20 15 10 18 13 2 22 4 24 25 14 9 Fshuffle(:,:,96) = 10 18 1 20 3 23 5 19 14 22 11 6 25 2 15 17 24 13 21 9 4 12 7 8 16 Fshuffle(:,:,97) = 4 6 13 14 16 23 5 19 20 3 10 18 7 2 9 17 12 25 8 15 11 24 1 21 22 Fshuffle(:,:,98) = 11 5 7 8 15 23 24 19 21 3 10 6 1 2 9 4 12 25 14 16 17 18 13 20 22 Fshuffle(:,:,99) = 17 24 13 20 9 11 12 7 14 3 10 5 19 2 16 4 18 1 8 22 23 6 25 21 15 Fshuffle(:,:,100) = 4 18 1 20 22 23 24 13 8 16 17 12 7 2 3 10 6 19 14 15 11 5 25 21 9

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Voss
Voss am 8 Jan. 2024
Looks like this is what you are going for:
[m,n]=size(F); % F = 582x255 matrix
for i = 1:n
C_i = F(:,i);
C_i_s = C_i(randperm(m));
F(:,i) = C_i_s;
end
And it can be written more succinctly wihout the temporary variables:
[m,n]=size(F); % F = 582x255 matrix
for i = 1:n
F(:,i) = F(randperm(m),i);
end
  2 Kommentare
Joyce Oerlemans
Joyce Oerlemans am 9 Jan. 2024
Hallo Voss,
thank you very much for your quick response. Could you elaborate a little bit more how I should interpret the output? Is it one possible matrix or does this give all possible matrices at once?
Thank you very much!
Voss
Voss am 9 Jan. 2024
It is one matrix. Each column of F is shuffled separately one time and stored back in F.

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by