all possible permutations
Afficher commentaires plus anciens
Hi Guys, any chance someone know how to get all possible permutations from a set of numbers?
e.g. [1 -1 2 -2 3 -3 0] but I would need to use only 4 numbers at the time, so there should be 840 possible permutations,... problem is that "perms" takes all 7 numbers into account at the time,...
is there a way matlab can do this?
many thanks, ondrej
1 commentaire
Jan
le 10 Nov 2011
Are you talking about permutations or combinations?
Réponses (7)
Dr. Seis
le 10 Nov 2011
Or...
a = perms([1, -1, 2, -2, 3, -3, 0]);
b = a(:,1:4);
c = unique(b,'rows');
2 commentaires
Fangjun Jiang
le 10 Nov 2011
+1! That should work and it's easier!
Jonathan
le 10 Nov 2011
This definitely works. However, it uses a lot more time and space than it needs to. It uses 5040 rows for a and b and 7 columns for a.
Jan
le 10 Nov 2011
0 votes
Ondrej
le 10 Nov 2011
0 votes
Fangjun Jiang
le 10 Nov 2011
Would this give you the correct result?
a=[1 -1 2 -2 3 -3 0];
b=nchoosek(a,4);
M=size(b,1);
c=cell(M,1);
for k=1:M
Temp=b(k,:);
c{k}=Temp(perms(1:4));
end
d=cell2mat(c);
Ondrej
le 10 Nov 2011
0 votes
Ondrej
le 10 Nov 2011
0 votes
Jonathan
le 10 Nov 2011
You can use this method. It does not use cell arrays, which are conceptually convenient but rather inefficient.
A = nchoosek([1 -1 2 -2 3 -3 0], 4);
P = perms(1:4);
B = zeros(size(A,1)*size(P,1),size(A,2));
for i = 1:size(P,1)
B(1 + size(A,1)*(i-1):size(A,1)*i,:) = A(:,P(i,:));
end
Catégories
En savoir plus sur Matrices and Arrays dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!