找到所有可能选择的功能

时间:2016-04-20 10:45:11

标签: matlab

我需要找到所有可能的子集选项的函数,例如:

a=[1 3 4 7 8];b = nchoosek(a,3);b =

 1     3     4
 1     3     7
 1     3     8
 1     4     7
 1     4     8
 1     7     8
 3     4     7
 3     4     8
 3     7     8
 4     7     8

我需要所有可能的子集,例如: 4 3 1,7 3 1,...

1 个答案:

答案 0 :(得分:3)

如果输出的顺序很重要,您需要使用perms。每个排列都将是结果中的新行。然后,您可以抓住第一个k列并找到唯一的行。

a = [1 3 4];
k = 2;

%// Generate all permutations of the index values corresponding to the input
%// We use the index rather than the values of a to ensure that they are unique
P = perms(1:numel(a));

%// Select the first k columns and find the unique rows
P = unique(P(:,1:k), 'rows');

%// Now grab these elements from a
b = a(P);

%//     1     3
%//     1     4
%//     3     1
%//     3     4
%//     4     1
%//     4     3