티스토리 뷰

, 있습니다. 바로 end라는 키워드입니다.

 

Code 1.

sub_a = a(3:end);     % a의 3번째~끝까지의 element를 sub_a에 저장합니다.
sub_b = b(3:4,2:end); % b의 3~4번째 행, 2번째~마지막 열에 해당하는 행렬을 sub_b에 저장합니다.


당연히 b 1차원 행렬일 경우 Code 1의 두 번째 줄은 에러가 뜹니다. 코드는 Code 2처럼 수도 있지만, 여러모로 end 쓰는 것에 비해 장점이 없습니다.

 

Code 2.

sub_a = a(3:length(a));
sub_b = b(3:4,2:size(b,2));

 

end 있으면 아래와 같은 활용이 가능합니다.

 

Code 3.

Y = X(2:2:end-1); % X의 짝수번 째 element를 Y에 저장, 단 마지막은 제외

 

Code 4.

str = ‘data_20181130’;
header = str(1:4);
date = str(end-7:end);

 

 

[ 약간 심화학습 ]

 

a 2차원 행렬이라도 Code 1의 줄은 동작을 합니다. 왜일까요? 매트랩은 행렬의 index 아래처럼 가지 방법으로 정의하기 때문입니다.



그래서 2차원 행렬의 열을 이어붙여서 하나의 열로 만들 있습니다.


Code 5.

a_columned = a(:);


콜론은 전체’, 또는 처음부터 끝까지라는 뜻입니다. 그럼 이렇게 만들어진 a_columned 원래의 a index 같겠죠?

 

 

[ 약간 심화학습 ]


이미 익숙하신 분들도 있겠지만, 매트랩의 콜론(:) 아래처럼 동작합니다.


Code 6.

na = 1:2:9;         % 1부터 2 간격으로 9까지를 na에 저장 (1,3,5,7,9)
sub_a = a(1:2:9);   % a의 1,3,5,7,9번째 element를 sub_a에 저장
na1 = 1:5;          % 간격을 지정하지 않으면 간격은 1로 자동지정 (1,2,3,4,5)
na2 = 1:2:8;        % 8을 넘어가는 수는 무시 (1,3,5,7)
sub_b = b(:,3:end); % b의 3번째~마지막 열을 sub_b에 저장

 

앞의 줄을 봅시다. 번째 줄은 아래처럼 있습니다.

Code 7.

sub_a = a(na);

 

, 행렬의 index 괄호 안에 직접 쓰든 (Code 6의 두 번째 줄) index 따로 변수로 저장하여 괄호 안에 쓰든 (Code 7) 매트랩은 구분하지 않고 똑같이 동작합니다. 풀어 쓰면 어차피 둘은 같은 command이니까요. 다시 말해, 행렬의 index 자연수 행렬을 넣을 있습니다. (당연히 index에 소수, 0, 음수는 올 수 없습니다. 매트랩에서 index는 1부터 시작합니다. C/C++은 0부터 시작합니다.) 따라서 이런 것도 되고,



이런 것도 됩니다.



엑셀에서 정렬을 누르면 옆에 붙어있는 열도 같이 정렬할 거냐고 묻죠? 그걸 매트랩에선 Code 8처럼 구현할 있습니다.


Code 8.

id_num = rawdata(:,1); % 첫 번째 열에 일련번호
data = rawdata(:,2); % 두 번째 열에 데이터 값
[data_sorted,idx] = sort(data); % 데이터를 오름차순으로 정렬
id_num_sorted = id_num(idx); % 데이터 순서에 맞게 일련번호를 재정렬

 

아쉽게도(?) 코드는 sortrows 함수를 이용하면 쉽게 가능합니다.

 

 

[ tip ]

 

당연한 얘기지만, 본문의 end는 for, while, switch, if 등에 따라오는 end와는 키워드만 같을 용법은 전혀 다릅니다.

 

- 게으른 맽랩

 

Refs.

https://kr.mathworks.com/help/matlab/ref/end.html?s_tid=doc_ta

https://kr.mathworks.com/help/matlab/ref/sortrows.html?lang=en




댓글