2011-02-23 4 views
2

'matches'라는 행렬 (예 : [n2 n3; n4 n5])에 따라 다시 정렬하려는 차원 (mxn)의 행렬 'eff_tot'이 있고 ' 끝에 일치합니다.다른 행렬의 배열에 따라 행렬을 구성하십시오.

즉, [eff_tot(:,n2) eff_tot(:,n3) ; eff_tot(:,n4) eff_tot(:,n5) ; eff_tot(:,n1)]을 갖고 싶습니다.

그게 다야!

첫 번째 대답의 예제를 가지고 가서, 제가하고 싶은 것은 :

eff_tot =

81 15 45 15 24 
44 86 11 14 42 
92 63 97 87  5 
19 36  1 58 91 
27 52 78 55 95 
82 41  0  0  0 
87  8  0  0  0 
9 24  0  0  0 
40 13  0  0  0 
26 19  0  0  0 

감사합니다.

답변

2

eff_tot에있는 모든 열의 인덱스를 나열한 벡터를 만든 다음 SETDIFF을 사용하여 [n2 n3 n4 n5]에없는 열을 결정합니다. 이 열은 비교할 수없는 열입니다. 이제 일치 및 일치하지 않는 열 인덱스를 연결하여 열을 재정렬 한 eff_tot 행렬을 만듭니다.

 
>> eff_tot = randi(100, 5, 7) 

eff_tot = 

    45 82 81 15 15 41 24 
    11 87 44 14 86  8 42 
    97  9 92 87 63 24  5 
    1 40 19 58 36 13 91 
    78 26 27 55 52 19 95 

>> n2 = 3; n3 = 5; n4 = 2; n5 = 6; 
>> missingColumn = setdiff(1:size(eff_tot, 2), [n2 n3 n4 n5]) 

missingColumn = 

    1  4  7 

>> eff_tot = [eff_tot(:,n2) eff_tot(:,n3) eff_tot(:,missingIndex); eff_tot(:,n4) eff_tot(:,n5) zeros(size(eff_tot, 1), length(missingIndex))]; 

eff_tot = 

    81 15 45 15 24 
    44 86 11 14 42 
    92 63 97 87  5 
    19 36  1 58 91 
    27 52 78 55 95 
    82 41  0  0  0 
    87  8  0  0  0 
    9 24  0  0  0 
    40 13  0  0  0 
    26 19  0  0  0 
+0

감사합니다. 그것이 내가 원했던 거의 것입니다. :-) 나는 내 질문에 놓친 유형이 있었다. 'matches'행렬은'[n2 n3; n4 n5]'와 대응하는''eff_tot''에서'n2'와'n4'가 연속적이어야합니다. – Johan

+0

@Johan - 왜 거의? –

+0

이유를 설명하는 질문을 편집했습니다. – Johan

관련 문제