MATLAB:创建一个包含所有可能组合的矩阵

时间:2016-04-03 13:17:51

标签: matlab

我正在进行一项有很多条件的实验,以及每种条件下特定数量的组。

一个。 3组
B. 3组 C. 2组 D. 3组 E. 3组

我已经知道有3×3×2×3×3 = 162种可能的组合组合。

我想创建一个包含162行和5列的MATLAB矩阵。也就是说,每个组合一行,一列表示每个组的值。

因此,例如,第一行将是[1 1 1 1 1],表示该组合对于所有条件都是组1。第二行将是[1 1 1 1 2],表示除了最后一个组2之外的所有条件都是第1组。第162行和最后一行将是[3 3 2 3 3]。

M = 1 1 1 1 1
    1 1 1 1 2
    .........
    3 3 2 3 3

实现这一目标的最有效方法是什么?我意识到我可以使用循环,但确信有更好的方法。我想也许perms函数可以工作,但我看不出如何。

1 个答案:

答案 0 :(得分:1)

您可以使用combvec(参见最后一行,其余部分仅生成测试数据):

% A. 3 groups
% B. 3 groups
% C. 2 groups
% D. 3 groups
% E. 3 groups

ngroups = zeros(5, 1);
ngroups(1) = 3;
ngroups(2) = 3;
ngroups(3) = 2;
ngroups(4) = 3;
ngroups(5) = 3;

v = {};
for i = 1:length(ngroups)
    v{i} = 1:ngroups(i) % generate a vector of valid group indices
end

% get all possible combinations
x = combvec( v{:} )

因为这将返回5 x 162 double,您需要转置生成的矩阵x

x.'