본문 바로가기

Octave: Utility

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