티스토리 뷰
있습니다. 긴 글 꼼꼼히 읽기 귀찮으신 분은 링크1과 링크2를 눌러보세요.
====
행렬을 좌우 또는 상하로 뒤집고 싶을 때가 있죠. 어차피 방법은 동일하니 여기서는 상하로 뒤집는 경우만 생각하겠습니다.
행렬을 뒤집는 덴 많은 방법이 가능합니다. 가장 쉽게(?) 생각나는 방법은 행렬의 index를 뒤집어서 행렬의 요소를 하나하나 다시 저장하는 것이겠습니다.
index_reversed = (size(a,1):-1:1);
a_reversed = zeros(size(a));
for i=1:size(a,1)
i_new = index_reversed(i);
for j=1:size(a,2)
a_reversed(i,j) = a(i_new,j);
end
end
쓸데없이 변수도 많이 만들어야 하고 코드가 지저분해 보입니다. 약간 더 발전한 형태로 다음처럼 만들 수도 있겠습니다.
a_reversed = zeros(size(a));
for i=1:size(a,1)
for j=1:size(a,2)
a_reversed(i,j) = a(end+1-i,j);
end
end
콜론을 이용할 줄 알면 다음처럼 쓸 수도 있을 것이며,
a_reversed = zeros(size(a));
for i=1:size(a,1)
a_reversed(i,:) = a(end+1-i,:);
end
index 다루기에 능숙해졌다면 다음도 가능합니다.
a_reversed = a(size(a,1):-1:1,:);
물론 제가 저런 시도들을 모두 해봤다는 건 절대 아닙........
====
행렬을 뒤집는 수준의 간단한 스킬은 구글링으로 충분히 알아낼 수 있습니다. 검색어를 다음과 같이 해서 구글링을 해보았습니다.
matlab how to reverse matrix
문법에 맞게 쓰려면 how to reverse a matrix in matlab 이겠지만, 영어공부하려는 건 아니니까 넘어갑시다. 검색하니 아래처럼 검색결과 맨 앞에 나옵니다.
맨 앞에 나오는 flipud와 fliplr이 행렬을 뒤집는 매트랩 함수입니다. flip은 뒤집는다는 뜻이고 (동전 뒤집기를 coin flipping이라고 하죠.) ud는 up/down, lr은 left/right을 뜻합니다. 이제 행렬을 위아래로 뒤집으려면 아래처럼 한줄만 쓰면 됩니다.
a_reversed = flipud(a);
이걸 응용하면 행렬을 180도 회전할 수도 있습니다. 아래처럼 쓰면 되겠지요.
a_rot180 = flipud(fliplr(a));
행렬의 180도 회전은 행렬을 90도 회전시키는 rot90을 두 번 써도 가능합니다. 똑똑한 매트랩은 위처럼 쓰니 "180도 돌릴려고? 이거보단 rot90(x,2)를 쓰는게 가독성 면에서 더 좋을거야~"라고 아래처럼 추천도 해주네요.
행렬의 180도 회전은 이미지를 회전시키는 imrotate와도 연관성이 있습니다. 이건 다음에 기회가 되면 다시 설명하겠습니다. 이제 행렬을 뒤집을 땐 flipud와 fliplr로 한줄에 끝냅시다.
끗.
- 게으른 둔재
'matlab' 카테고리의 다른 글
[설문조사 결과] 선호하는 매트랩 공부법은? (0) | 2018.12.07 |
---|---|
행렬의 끝을 가리키는 키워드가 있나요? + 행렬의 index에 대하여 (0) | 2018.12.04 |
한 줄이 너무 길어지는데 다음 줄로 넘길 수 있나요? (0) | 2018.10.25 |
전치행렬이 켤레복소수로 나올 땐? (0) | 2018.10.24 |
매트랩입니다. Matlab is... (0) | 2018.10.01 |