我有以下矢量:
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
.
.
.
你能帮我解决一下这个问题吗?
由于
答案 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个组合)。