Question about using randperm in a loop

3 visualizaciones (últimos 30 días)
Veena Chatti
Veena Chatti el 9 de Mzo. de 2020
Comentada: Veena Chatti el 10 de Mzo. de 2020
Hi,
I'm using randperm in a loop that's meant to generate unique random three-digit numbers to fill a 5x5 matrix, r, like this:
for i = 1:length(r)
r(1:5,i) = (randperm(900,5) + 99);
end
My question is:
Is there a possibility of repeating a number given the function is being called 5 times, once for each column? I want each number to be unique.
Thanks,
Veena

Respuesta aceptada

John D'Errico
John D'Errico el 10 de Mzo. de 2020
Editada: John D'Errico el 10 de Mzo. de 2020
So, you want to sample 5 sets of 5 numbers, all from the same set, but you want them to be unique? (The technical description would be to sample without replacement.)
The point is, you already know how to sample 5 such numbers. So just sample 25 numbers!
r = reshape(randperm(900,25) + 99,[5 5]);
There is no reason to need a loop.
  2 comentarios
Veena Chatti
Veena Chatti el 10 de Mzo. de 2020
Hi John,
Thanks, reshape worked!
Best,
Veena
Veena Chatti
Veena Chatti el 10 de Mzo. de 2020
And yes, I got rid of the loop!

Iniciar sesión para comentar.

Más respuestas (1)

James Tursa
James Tursa el 10 de Mzo. de 2020
Editada: James Tursa el 10 de Mzo. de 2020
If you want each number in the matrix to be unique, then don't call randperm( ) by row because that will not guarantee uniqueness between calls. Call randperm( ) only once for the entire matrix (25 elements) and then reshape to a 5x5. E.g., something like
r = reshape(randperm(900,25) + 99,5,5);

Categorías

Más información sobre Logical 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!

Translated by