2017-09-05 5 views
1

를 사용하여 하위 요소 나는 아래의 벡터를 가지고있다. 이렇게하려면 나는 아래의 명령을 사용할 수 있습니다벡터의 순열 및 MATLAB

p=perms(v) 

을하지만 예를 들어, T1, T2, T3, T4 1 ~ 4의 하위 인덱스를 가지고 각 요소로 한 단계 더 가고 싶어 .. ... C1, C2, C3, C4. 이러한 결과

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

어떻게 그렇게 좀 도와 주 시겠어요를 참조로 나는 그것의 서브 인덱스 모든 가능한 순열을 가지고 싶다?

감사

+0

각 요소의 색인이 1 : 4 일 때 v = { 'T', 'AT', 'AS', C '} – 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 조합). 예상대로

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

그리고 p는 또한, 6144 별 4 셀 어레이 될 것입니다 (24 순열 회 256 개 조합) : 그것과 같이 perms를 사용하여 순열의 총 수의로 이제 당신은 각 행을 확장 할 수 있습니다.

+0

고마워, 많이 .. 도와 줬어. :)하지만, 나는 T, AT, AS와 C 사이의 순열을 원해. 그들의 색인. 당신이 저에게 준 것은 인덱스에서만 작동하지만 이제는 하위 요소의 순서대로 작동합니다. – Juliette

+0

@ 줄리엣 : 죄송합니다. 내 첫 번째 버전은 * 조합 수를 제공했습니다. 나의 새로운 대답은 그 조합들의 전체 * 순열 *을 얻는 법을 보여줍니다. – gnovice

+0

감사합니다 ... 당신은 많은 도움이되었습니다! – Juliette