在Matlab中查找向量内的所有特定长度的集合

时间:2015-02-03 16:59:44

标签: matlab

我在这里的原始问题(后续编写)是:

(在Matlab中)

"如果我有一个矢量,例如' [1 2 3 4 5 6 7]'。

如何在此范围内找到指定长度的每个可能集合(例如length = 3 - > [1 2 3], [1 2 4] ...)?

我希望能够收集这些套装中的每一套,然后找到这些套装的每一种排列(我应该能够在这个阶段使用' perm'对吗?)。 #34;

跟进:

如何在同一个向量中找到指定长度的每个可能集合的每个可能的排列(上面只是一个示例),其中包含一个或多个指定的数字(例如"在向量中找到每个集合长度3包含数字1,然后找到这些")

的每个排列

1 个答案:

答案 0 :(得分:1)

完成Luis'首先想到的是:

v = [ 11, 12, 13, 14, 15, 16 ];
n = 3;

allSets = nchoosek(v,n);

获得每组的排列:

%// output in cell array
output = arrayfun(@(x) perms(allSets(x,:)),1:size(allSets,1),'Uni',0)

%// alltogether
output2 = vertcat(output{:})

或者让它在一行中变得更复杂:

output2 = reshape(cell2mat(arrayfun(@(x) perms(allSets(x,:)),1:size(allSets,1),'Uni',0)),[],3)