티스토리 뷰
네, 있습니다. 바로 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
'matlab' 카테고리의 다른 글
Matlab 수식을 latex 형식으로 바꿔주는 코드입니다. (0) | 2018.12.27 |
---|---|
[설문조사 결과] 선호하는 매트랩 공부법은? (0) | 2018.12.07 |
한 줄이 너무 길어지는데 다음 줄로 넘길 수 있나요? (0) | 2018.10.25 |
전치행렬이 켤레복소수로 나올 땐? (0) | 2018.10.24 |
행렬을 뒤집는 간단한 방법이 있나요? - flipud, fliplr (0) | 2018.10.04 |