Permutation/shuffling of number sets

2 visualizaciones (últimos 30 días)
Felix
Felix el 15 de Mzo. de 2011
I have two sets of numbers, e.g.,
[A1 A2 A3]
and
[B1 B2 B3].
Now I want to swap some of them between the two sets, but the numbers should always stay at the same position.
Some possibilities would be: [B1 A2 A3] and [A1 B2 B3];
or
[A1 B2 B3]
and
[B1 A2 A3].
in case of 2x3 numbers there are
  • 1(intitial position, would be the same as swapping all three)
  • 3(single swaps)
  • 3(double swaps)
  • = 7 possibilites.
It's basically very easy, I probably explained it too complicated. But I cannot figure out how to produce this with perms or some other function. it would already be very helpful just to get a matrix like
[000
001
010
100
011
101
110]
for any size of n, which I could then use as index 1 means swapping 0 means change nothing.

Respuesta aceptada

Doug Hull
Doug Hull el 15 de Mzo. de 2011
A = [1 2 3];
n = length(A);
swapIndicies = dec2bin(0:(n^2)-2);
numericSwapIndicies = (swapIndicies == '1')
  2 comentarios
Felix
Felix el 16 de Mzo. de 2011
how can I undo 'accept answer'?
I just found out this solution gives wrong results for n>6
Jan
Jan el 16 de Mzo. de 2011
@Felix: You can ask files@mathworks.com for un-accepting the answer.

Iniciar sesión para comentar.

Más respuestas (2)

Matt Fig
Matt Fig el 15 de Mzo. de 2011
Here is another method, using NPERMUTEK:
P = logical(npermutek([0 1],length(A)));
I = ceil((find(P))/size(P,1));
Ar = A(ones(1,size(P,1)),:);
Br = B(ones(1,size(P,1)),:);
Ar(P) = B(I)
Br(P) = A(I)

Sean de Wolski
Sean de Wolski el 15 de Mzo. de 2011
C = [A B];
idx = randperm(numel(C));
new_matrix = C(idx(1:3));
  1 comentario
Felix
Felix el 15 de Mzo. de 2011
ok this produces one result, but I want all possible permutations. thanks anyway

Iniciar sesión para comentar.

Categorías

Más información sobre Resizing and Reshaping 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