使用MATLAB对向量及其子元素进行置换

时间:2017-09-05 14:53:14

标签: matlab permutation

我有以下矢量:

v={'T','AT','AS','C'};

我想看看这个载体的所有可能的排列。为此,我可以使用以下命令:

p=perms(v)

但我想更进一步,因为每个元素的子索引为1到4,例如,T1,T2,T3,T4 ...... C1,C2,C3,C4。我希望其子索引具有所有可能的排列,如此结果

T1,AT1,AS1,C1
C3,AT3,AS3,t3
AS2,AT2,C2,T2
     .
     .
     .

你能帮我解决一下这个问题吗?

由于

1 个答案:

答案 0 :(得分:2)

您可以先使用ndgrid为所有可能的组合生成一组索引来执行此操作:

v = {'T1', 'AT1', 'AS1', 'C1'; ...
     'T2', 'AT2', 'AS2', 'C2'; ...
     'T3', 'AT3', 'AS3', 'C3'; ...
     'T4', 'AT4', 'AS4', 'C4'};
[ind1, ind2, ind3, ind4] = ndgrid(1:4);
c = [v(ind1(:), 1) v(ind2(:), 2) v(ind3(:), 3) v(ind4(:), 4)];

c将是一个256乘4的单元阵列,正如预期的那样(4 4 组合)。现在,您可以使用perms扩展每一行的排列总数,如下所示:

p = perms(1:4);
p = reshape(c(:, p.').', 4, []).';

p将是一个6144乘4的单元阵列,也是预期的(24个排列乘以256个组合)。