1. 주석
$\#$
$\%$
한 줄 주석
$\%\{$
$\cdots$
$\%\}$
여러 줄 주석, $\%$ 대신 $\#$ 써도 됨
2. 문자열
문자열은 작은 따옴표(')나 큰 따옴표(")로 감싸면 된다.
3. 크기
$size()$ 함수와 $length()$ 함수가 있는데 약간 다르다.
둘 다 행렬 또는 벡터의 차원을 반환하지만 $size()$와 달리 $length()$는 차원을 지정할 수 없고 가장 긴 차원을 반환한다.
$Let\; A\; is\; 3\, \times\, 4\; matrix\; and\; v\; is\; 5\, \times\, 1\; vector$
$size(A,\,1) = 3 %size\; of\; 1-dimension\; i.e.\; length\; of\; row$
$size(A,\,2) = 4 %size\; of\; 2-dimension\; i.e.\; length\; of\; column$
$length(A) = 4 %Column\; length\; is\; bigger\; than\; row\; length$
행렬에서 1차원은 행, 2차원은 열이다.
$rows()$ 함수와 $cols()$ 함수는 각각 주어진 행렬의 행 길이, 열 길이를 반환한다.
즉 $row(A)$는 $size(A,\,1)$과 같고 $cols(A)$는 $size(A,\,2)$와 같다.
3. 프롬프트 변경
위와 같이 바꿀 수 있다. 다른 함수들과 달리 이름이 대문자다.
$PS1()$의 매개변수에 새롭게 설정할 프롬프트명을 문자열로 주면 된다.
기본 프롬프트는 명령어를 입력할 때마다 octave: 옆에 숫자가 늘어난다.
4. 행렬 연산
1. 콜론(:)
$A = \begin{bmatrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 & 11 & 12 \\ 13 & 14 & 15 & 16\end{bmatrix}$
$A(2, :) %Every\; element\; along\; that\; 2nd\; row$
$A(:, 1) %Every\; element\; along\; that\; 1st\; column$
$A([1 3], :) %Every\; element\; along\; that\; 1st\; and\; 3rd\; row$
$A(1:3, :) %Every\; element\; along\; that\; from\; 1st\; row\; to\; 3rd\; row$
$A(:, 1:3) %Every\; element\; along\; that\; from\; 1st\; column\; to\; 3rd\; column$
$A(:) %Column vector of all element of A$
주의할 점은 $A(:)$의 행 순이 아닌 열 순으로 붙는다는 것.
즉 첫 번째 열 밑에 두 번째 열이 붙고, 그 밑에 세 번째 열이 붙는 식으로 전체 요소를 열 벡터로 만든다.
2. 요소 단위 연산
기본 연산자 ($+,\; -,\; *,\; /,\; \hat{}$) 앞에 $.$을 붙이면 해당 연산이 각 요소에 대해 개별적으로 이루어진다.
예를 들어
$A\; =\; \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}$
에 대해
$A.\hat{}2$
$\;=\;\begin{bmatrix} 1\hat{}2 & 2\hat{}2 \\ 3\hat{}2 & 4\hat{}2 \end{bmatrix}$
$\;=\;\begin{bmatrix} 1 & 4 \\ 9 & 16 \end{bmatrix}$
이다.
$\begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}\;\times\;\begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}\;=\;\begin{bmatrix} 7 & 10 \\ 15 & 22 \end{bmatrix}$가 아니다.
또한 행렬끼리도 연산이 가능한데, 예를 들면 다음과 같다.
$A\; =\; \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, B\; =\; \begin{bmatrix} 4 & 5 \\ 6 & 7 \end{bmatrix}$
$A.+B\;=\;\begin{bmatrix} 1\,+\,4 & 2\,+\,5 \\ 3\,+\,6 & 4\,+\,7 \end{bmatrix}\;=\;\begin{bmatrix} 5 & 7 \\ 9 & 11 \end{bmatrix}$
<행렬 - 스칼라>
<행렬 - 행렬>
$cf.$
$A.\hat{}B$
$\;=\;\begin{bmatrix} 1\hat{}4 & 2\hat{}5 \\ 3\hat{}6 & 4\hat{}7 \end{bmatrix}$
$\;=\;\begin{bmatrix} 1 & 32 \\ 729 & 16384 \end{bmatrix}$
5. 그 밖에 행렬 관련 함수
$eye(n)$
$n\,\times\,n$ 항등 행렬을 만든다.
항등 행렬로 쓰이는 $I$의 발음과 영단어 eye의 발음이 같은 걸 이용한 유머인 것 같다...
$magic(n)$
$n\,\times\,n$ 마방진 행렬을 만든다.
사실 마방진 자체가 필요한 경우는 거의 없고 정방행렬을 만들 때 쓰는 편이다.
$find(CONDITION)$
주어진 조건에 맞는 인덱스를 반환한다.
$find(A >= 10)$
A를 열 기준으로 늘어놨을 때 인덱스를 기준으로 10 이상의 요소의 인덱스를 반환한다.
즉 A(:)와 같이 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16에서
13, 10, 14, 11, 15, 12, 16의 인덱스인 4, 7, 8, 11, 12, 15, 16이 열 벡터로 반환된다.
$[\; r\; c\; ]\; =\; find(A >= 15)$
$r$에는 주어진 조건에 맞는 요소의 행 인덱스가, $c$에는 열 인덱스가 열 벡터의 형태로 할당된다.
$A$에서 $15$보다 크거나 같은 요소는 $15$와 $16$이고 이들의 인덱스는 각각 $(4,\;3)$, $(4,\;4)$다.
따라서 $r = \begin{bmatrix} 4 \\ 4 \end{bmatrix}$, $c = \begin{bmatrix} 3 \\ 4 \end{bmatrix}$다.
$sum(A)$
주어진 행렬의 합을 반환하며, $size()$ 함수처럼 차원을 지정해줄 수 있다.
또한 행렬의 전체 요소 합은 $sum(sum(A))$로 구할 수 있다.
$sum(A)$
모든 행의 합을 반환한다.
즉
$[\;1\; 2\; 3\; 4\;]$
$+ [\;5\; 6\; 7\; 8\;]$
$+ [\;9\; 10\; 11\; 12\;]$
$+ [\;13\; 14\; 15\; 16\;]$
$= [\;28\; 32\; 36\; 40\;]$
가 된다.
$sum(A, 1)$
첫 번째 차원의 합을, 즉 행의 합을 반환한다.
$sum(A, 2)$
두 번째 차원의 합을, 즉 열의 합을 반환한다.
$\begin{bmatrix} 1 \\ 5 \\ 9 \\ 13\end{bmatrix} + \begin{bmatrix} 2 \\ 6 \\ 10 \\ 14\end{bmatrix} + \begin{bmatrix} 3 \\ 7 \\ 11 \\ 15\end{bmatrix} + \begin{bmatrix} 4 \\ 8 \\ 12 \\ 16\end{bmatrix} = \begin{bmatrix} 10 \\ 26 \\ 42 \\ 58\end{bmatrix}$
$prod(A)$
주어진 행렬의 곱을 반환하며, $size()$ 함수처럼 차원을 지정해줄 수 있다.
또한 행렬의 전체 요소 합은 $prod(prod(A))$로 구할 수 있다.
기타 사용법은 $sum()$과 동일하다.
$ceil(A), floor(A)$
A의 모든 요소를 올림, 버림한 결과를 반환한다.
$max(A)$
각 열에서 가장 큰 요소를 행렬로 반환한다.
1열의 최대값은 $8$, 2열의 최대값은 $9$, 3열의 최대값은 $7$이므로 반환은 $[\;8\;9\;7\;]$이 된다.
행렬 전체의 최대값은 $max(max(A))$로 구할 수 있다.
'Machine Learning' 카테고리의 다른 글
Octave: 제어문 (0) | 2021.02.27 |
---|---|
Octave: 기본적인 연산 (0) | 2021.02.23 |