2017-09-05 22 views
1

它的子元素我有下面的矢量:在置換載體,並使用MATLAB

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

v = {'T','AT','AS','C'}當每個元素的索引爲1時:4 – Juliette

+1

我假設子指令不能重複,例如'T1'和'T2'不能一起出現? – gnovice

+0

我不知道該怎麼做:( – Juliette

回答

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個組合)。現在,您可以擴大各行通過它使用perms像這樣排列的總數:

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

而且p將是6144 - 4單元陣列,也如預期(24組的排列組合256)。

+0

謝謝,很多..你幫助:)但事情是,我想T,AT,AS和C之間的排列以及他們的指數。你給我的只能在索引上工作,但現在按照子元素的順序工作。 – Juliette

+0

@Juliette:對不起。我的第一個版本只給了*組合的數量*。我的新答案顯示瞭如何獲得這些組合的總排列數*。 – gnovice

+0

Thanks..you幫助了很多! – Juliette