Permutation of an array

22 visualizaciones (últimos 30 días)
Doobie
Doobie el 8 de Mayo de 2017
Comentada: Walter Roberson el 8 de Mayo de 2017
Is there a built-in matlab function that gives a certain number of permutations of an array? For example:
Take array:
A = [1 2 3 4];
Now there are 24 different permutations. I know that perms(A) would give me all 24 permutations of array A, but I don't need all 24. I only want 4 out of 24. So the function I'm looking for could give me the following matrices:
1 2 3 4 3 2 1 4 1 2 3 4
2 4 3 1 2 1 3 4 3 2 1 4
4 3 1 2 2 3 4 1 3 4 2 1
4 1 2 3 4 1 2 3 4 3 2 1
The important thing is that the selection of the 4 has to be random. So whenever I run my function, I expect to get different 4 (of course, because it is random, I could get the exact same 4 but you get the idea).
Is there a function that does this? If not, could someone direct me towards a code?

Respuestas (2)

Jan
Jan el 8 de Mayo de 2017
Start with:
A = [1 2 3 4];
M = perms(A);
Then pick your submatrix randomly:
P = M(randperm(24, 4), :)

Walter Roberson
Walter Roberson el 8 de Mayo de 2017
Editada: Walter Roberson el 8 de Mayo de 2017
A( randperm(length(A)) )
which you can repeat 4 times.
  2 comentarios
Doobie
Doobie el 8 de Mayo de 2017
Editada: Doobie el 8 de Mayo de 2017
This is not what I'm looking for. Because this is a random process repeated 4 times, it could give the same permutation twice. I want 4 distinct permutations.
Walter Roberson
Walter Roberson el 8 de Mayo de 2017
There is no Mathworks provided function for this purpose.
rows_needed = 4;
cols_needed = length(A);
permidx = [];
more_needed = rows_needed;
while more_needed > 0
[~, trial_idx] = sort( rand(more_needed, cols_needed), 2 );
permidx = unique([permidx; trial_idx], 'rows', 'stable');
more_needed = rows_needed - size(permidx,1);
end
randperms = A(permidx);

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices 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