0

I have a 118800x6 matrix. the first column contains values from 1 to 99 (there are 1200 rows for each value). now I need to create a new matrix that contains 900 random rows (all of the previous column; the rows are extracted from the original matrix) for each 99 values. I tried with a for loop but that means that I have to write 99 rows of code...there is a faster way? Thank you in advance.

1 Answers1

0

assuming your matrix is called M:

for num = 1:99
    %Extract only rows that have the correct number in column one
    subsample = M(M(1, :) == num, :);
    %Randomly change the order of the rows of this subsample
    shuffledsubsample = subsample(randperm(1200), :);
    %Only keep the first 900 rows
    final(:,:,num) = shuffledsubsample(1:900, :);
end
Dan
  • 45,079
  • 17
  • 88
  • 157