오늘부터 MATLAB 실습했던 내용을 복습하는 느낌으로 정리를 하려고 합니다. 영상 처리(image processing) 관련한 내용이 주가 될 텐데 학습하시는 분들에게 도움이 되었으면 좋겠습니다. 아마 MATLAB은 오픈 소스가 아니라서 학생이라면 학교에서 라이센스를 구매를 한 경우에만 쓸 수 있을 것입니다.
MATLAB이 범용성은 조금 떨어지는 것 같아도 학부생인 제 기준으로 C언어와 파이썬 다음으로 많이 접하는 것 같습니다. 기본적으로 파이썬과 같이 인터프리터 방식이고 문법적으로 비슷한 부분도 있는 것으로 알고 있습니다.
아무튼 이번에는 프로그램 창과 기본적인 행렬 표현 방식에 대한 내용을 먼저 살펴보려고 합니다.
프로그램 창
MATLAB을 설치해서 구동하게 되면 위와 같은 화면이 뜰 겁니다.
작업을 하기 전에는 도구 상자 밑에 폴더 모양에 ‘▶’ 화살표로 표시하고 있는 ‘현재 폴더(Current Folder)’를 먼저 확인하면 좋을 것 같습니다. 코딩한 스크립트나 함수를 저장하면 기본적으로 해당 경로의 폴더에 저장이 됩니다. 거꾸로 실행시킬 때도 같은 폴더 안에 있어야 합니다.
그 밑에 있는 ‘명령 창(Command Window)’에서 한 줄 한 줄 명령을 선언하고 바로 실행할 수 있습니다. 인덱싱을 통해서 저장된 변수는 우측의 ‘작업공간(workspace)’에 나타나게 됩니다.
띄어쓰기는 하나 마나
명령을 선언하는데 있어 띄어쓰기는 indexing 구분하는 것 이외에 큰 의미를 같지 않습니다,
>> 2 + 4
>> 2+4
두 개 다 상관이 없다는 겁니다.
Semicolon으로 결괏값 비노출시키기
그리고 본격적인 작업에 앞서 또 하나 기억하면 좋은 것은 semicolon(;)의 사용입니다. 예컨대 for 문을 사용해서 반복 연산을 하게 될 경우 명령창에 불필요한 연산 과정이 그대로 노출되는 경우가 생깁니다. 이럴 경우 세미콜론(semicolon)을 해당 연산의 제일 끝자락에 붙여주게 되면 결과가 명령 창에 따로 노출이 되지 않습니다.
단순히 결과를 보이느냐 안 보이느냐의 차이도 있지만 semicolon을 붙이지 않게 되면 앞서 말했다시피 연산 과정을 다 보여주기 때문에 과정을 노출시키는데 걸리는 시간이 상당해집니다. 때문에 실행 시 출력이 지연되는 문제가 생겨서 복잡한 연산은 꼭 semicolon을 끝에 붙여 주시는 게 좋습니다.
코딩한 것을 저장하고자 할 때는 기본적으로 도구 상자의 ‘새 스트립트’를 눌러서 스크립트로 저장을 해야 합니다. 명령 창에서 지나간 것들은 작업공간과 같이 있는 ‘명령 내역’을 눌러서도 확인할 수 있습니다.
아마 창에 대한 나머지 내용은 직접 눌러 보시면서 어떤 기능인지 확인해보시는 것이 더 좋을 것 같습니다.
기본적인 행렬 표현
그러면 추가로 matrix와 array를 표현하는 방법을 더 보도록 하겠습니다.
행렬 표현 시 대괄호 안에 수 나열
>> a = [1 2 3 4]
‘대괄호[ ]’를 사용해서 안에 그냥 숫자를 나열하면 array를 작성할 수 있습니다. 쉼표 없이 띄어쓰기만 하면 열이 구별됩니다. 사실 쉼표를 사용해도 상관은 없습니다.
열 구분 시 seimcolon 사용
여기에 이제 행 구분만 추가하면 ‘n x n’ 행렬(matrix)를 작성할 수 있습니다. 행 구분을 위해서 다시 semicolon(;)이 등장하게 됩니다.
Semicolon의 쓰임을 정리하면 명령을 선언하는데 있어 선언문에 끝에 사용하게 될 경우 결과를 따로 노출시키지 않게 해주고, 행렬 안에 사용하면 행을 구별하는 역할을 해준다는 것입니다.
따옴표로 Transpose 하기
다음으로 이렇게 만든 행렬의 사칙연산 과정을 보겠습니다. 우선 사칙연산 이전에 Transpose하는 법을 보도록 하겠습니다.
간단하게 따옴표만 붙여주면 행과 열이 뒤바뀌는 transpose 과정이 수행됩니다. 그런데 가끔 복붙 같은 거 하게 되면 transpose 연산에 오류가 생길 때가 있습니다.
이런 경우는 따옴표가 방향이 있는 것이라서 그럴 확률이 있습니다. 지우고 명령 창 내에서 따옴표를 입력해주면 해결이 될 것입니다.
Transpose를 먼저 본 이유는 행렬을 곱할 때 첫번쨰 행렬의 열과 두번째 행렬의 행의 개수가 맞아야 하기 때문에 transpose를 해서 곱해야 되는 경우가 생기기 때문입니다.
사칙연산
더하기(+), 빼기(-), 곱하기(*), 나누기(/)의 사칙연산은 사실 기호만 잘 쓰면 됩니다.
A, B를 위와 같이 저장하고 연산을 해보겠습니다.
큰 문제없이 연산이 됩니다. 행렬끼리 연산이 아니라 상수에 대한 연산 마찬가지입니다.
온점(.)을 찍어 Element-wise 연산
그래서 사칙연산 자체는 우리가 알고 있는 대로 잘 하면 됩니다. 추가로 얘기를 할 부분은 element-wise 연산입니다. Element-wise라는 말은 각 요소끼리, 즉 element-wise 곱하기는 1과 4를 곱하고 2와 5를 곱하는 식으로 같은 위치에 있는 수를 곱해서 해당 위치의 값을 정하겠다는 것입니다.
Element-wise 연산은 연산기호 앞에 온점(.)을 찍어주면 됩니다. 하지만 주의할 부분은 서로 크기가 같지 않으면 element-wise 연산은 불가능합니다. 예컨대 ‘2 x 2’ 행렬과 ‘3 x 3’ 행렬은 element-wise 곱하기를 해줄 수 없다는 것입니다.
그래도 MATLAB 사용에 있어서 좋은 점은 어떤 오류가 생겼는지 말을 해준다는 것입니다.
상수에 대한 element-wise도 해줄 수 있습니다. 여기서 삿갓(^)은 거듭제곱을 의미합니다.
행렬 합치기
마지막으로 서로 다른 행렬을 합하는 방법을 보려고 합니다. 그럼 A와 B를 합해보겠습니다.
그냥 새로 행렬을 작성하는 것처럼 대괄호를 사용해서 안에 나열하면 행렬이 합쳐질 수 있습니다.
마찬가지로 세미콜론을 사용하면 행을 바꾸어서 위아래로 합쳐지게 됩니다.
'IT > MATLAB' 카테고리의 다른 글
[MATLAB] 행렬 인덱싱과 슬라이싱 (0) | 2024.05.04 |
---|