2009-04-27 11 views
8

1 x 12 행렬을 가지고 4 x 3 행렬로 크기를 조정하려고한다고 가정합니다. 내가 어떻게 할 수 있니?MATLAB에서 행렬 크기를 조정하는 방법은 무엇입니까?

for n = 1:(length(mat)/3) 
    out(n,1:3) = mat(((n-1)*3 + 1):((n-1)*3 + 3)); 
end 

이 작업을 수행 할 수있는 더 나은 방법이 있나요 :

나의 현재 솔루션은 추한의 종류입니까?

답변

24

reshape은 당연히 @gnovice에 명시된 바와 같이 적절한 해결책입니다. 당신이 얼마나 많은 열을 모르는 경우

A = 1:12; 
B = reshape(A,4,[]); 
B = 
    1  5  9 
    2  6 10 
    3  7 11 
    4  8 12 

그래서, reshape는 당신을 위해 그것을 계산됩니다

reshape의 좋은 기능은이 수 있다는 것입니다. 마찬가지로, 나가는 경우 reshape은 행 수를 입력합니다.

C = reshape(A,[],4) 
C = 
    1  4  7 10 
    2  5  8 11 
    3  6  9 12 
+2

+1 : 니스! 나는 실제로 그것을 결코 전에 알아 차리지 못했다. 나는 그것을 결코 사용할 필요가 없었던 것으로 생각한다. – gnovice

12

RESHAPE 기능을 시도

A = (1-by-12 matrix); 
B = reshape(A,4,3); 

매트릭스 B은 즉 열은 좌측 이동 위에서 아래로 충전한다 (a 칼럼 방식으로 의 요소로 채워질 것이다하는 것으로 권리).

예 :

>> A = 1:12; 
>> B = reshape(A,4,3) 

B = 

    1  5  9 
    2  6 10 
    3  7 11 
    4  8 12 
+0

A에 정확하게 4 * 3 요소가없는 경우 재구성은 오류를 반환합니다. – AnnaR

+0

예, RESHAPE의 정상적인 예상 동작입니다. – gnovice

+1

정확히 4 * 3 요소가 없으면 RESHAPE에 0을 추가 할 수 있습니까? 나는 12 개 이하의 요소가 있다면 의미했다. –

9

이 gnovice의 솔루션을 확장 할 수있는 : 당신은 차원 순서를 변경하는 매트릭스 구조를 사용 전치합니다 ('연산자) 또는 permute()의 다른 순서가 필요한 경우

당신이 전화 후를 reshape().

+0

+1 : 전치와 PERMUTE에 대한 좋은 지적. 이들은 때때로 모양이 바뀐 후에 필요합니다. – gnovice

관련 문제