Permutation/shuffling of number sets

2 vues (au cours des 30 derniers jours)
Felix
Felix le 15 Mar 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.

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (2)

Matt Fig
Matt Fig le 15 Mar 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 le 15 Mar 2011
C = [A B];
idx = randperm(numel(C));
new_matrix = C(idx(1:3));
  1 commentaire
Felix
Felix le 15 Mar 2011
ok this produces one result, but I want all possible permutations. thanks anyway

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by