all possible permutations

1 回表示 (過去 30 日間)
Ondrej
Ondrej 2011 年 11 月 10 日
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 件のコメント
Jan
Jan 2011 年 11 月 10 日
Are you talking about permutations or combinations?

サインインしてコメントする。

回答 (7 件)

Dr. Seis
Dr. Seis 2011 年 11 月 10 日
Or...
a = perms([1, -1, 2, -2, 3, -3, 0]);
b = a(:,1:4);
c = unique(b,'rows');
  2 件のコメント
Fangjun Jiang
Fangjun Jiang 2011 年 11 月 10 日
+1! That should work and it's easier!
Jonathan
Jonathan 2011 年 11 月 10 日
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
Jan 2011 年 11 月 10 日
If you search in the FEX, you will find this nice tool: FEX: combinator.

Ondrej
Ondrej 2011 年 11 月 10 日
talking about permutations not combinations,...
nchoosek([1, -1, 2, -2, 3, -3, 0],4) will give you combinations mate, but thanks anyway,...
how no idae what is FEX, but I guess I need to give it a go,... many thanks,...

Fangjun Jiang
Fangjun Jiang 2011 年 11 月 10 日
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
Ondrej 2011 年 11 月 10 日
thank you very much! very nice! you done thinking I should have done,... thanks a lot,... I kind of hoped that matlab has a built-in function which I don't know about,... thanks a lot again!

Ondrej
Ondrej 2011 年 11 月 10 日
thank you mate! really nice! apparently I'm not that great with matlab,... cheers,..

Jonathan
Jonathan 2011 年 11 月 10 日
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

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by