2011년 4월 8일 금요일

[MATLAB] reshape, permute 명령어 사용하기










- rehsape 명령어
reshape 명령어는 reshape(변수, 바꾸려는 행렬 크기)로 사용하는데 원본 행렬의 size곱과 변환 후 행렬의 size곱이 동일해야 한다.
즉 원본행렬 크기가 2x3이면 행,열 곱이 6, 예에서 보이는 변환 행렬 크기는 3x2이므로 행, 열 곱이 6이므로 reshape 변환이 가능하다
어쨌든 그래서 reshape 명령어를 사용하면 변환하고자 하는 크기대로 행렬 크기가 변환하는데 행렬의 원소들 순서는 원본행렬을 화살표 표시대로 (MATLAB에서는 column 방향이 우선방향) 따라가면서 1열짜리 행렬로 뽑았을 때 그 순서를 따라 변환행렬 크기에 따라 column 방향을 따라 집어넣어주면 된다.

- permute 명령어
위의 예에서 permute 명령어는 행, 열을 바꿔주는 명령어로써 원본 행렬이 2x3 크기일 때 행을 열로 바꿔주고 열을 행으로 바꿔준다.
명령어에 들어 있는 [2, 1]이라는 의미는 원본행렬이 2x3일 때 [2,1]에서의 2는 2x3행렬의 행(row)에 해당하고 1은 열(column)에 해당한다.
[1, 2]로 집어넣어주면 원본행렬이 나올 것이다.

좀 더 제대로 알아보기 위해 다음 그림을 추가 했다.





이 예는 2x3x2짜리 행렬을 2x2x3짜리로 변환하는 예로 변환옵션을 [1,3,2]로 주었다.
[1,3,2]에서 첫 번째는 행, 두 번째는 열, 세 번째는 몇 번째 행렬을 나타내는 것으로써
행은 그대로 가고, 행렬 번호랑 열을 바꿔주겠다는 소리다.

첫 번째가 그대로 가는걸 보면 1, 2, 3, 7, 8, 9는 첫 번째 행에 그대로 있고 4, 5, 6, 10, 11, 12는 두 번째 행에 그대로 둔다는 소리다.

다만, 각 행렬에서의 열이 행렬번호로 바뀌므로 원본 행렬의 첫 번째 행렬에서의 각 열인 [1;4], [2;5], [3;6]은 쪼개져서 3개의 행렬로 배치되고
두 번째 행렬의 [7;10], [8;11], [9;12]도 쪼개져서 3개의 행렬로 배치되어 오른쪽 그림과 같이 나타난다.

설명이라고 해봤자 알아먹기 힘드니까 이것저것 넣어보고 생각해봐야 한다. 은근히 헛갈린다.

댓글 1개: