1. 행렬 생성
다음과 같은 형식으로 $m\,\times\,n$ 행렬을 만들 수 있다.
$A = [ a_{11}\;a_{12}\;\cdots a_{1n};\;a_{21}\;a_{22}\;\cdots\;a_{1n};\;\cdots;\;a_{n1}\;a_{n2}\;\cdots\;a_{nn}; ]$
또는
$A = [ a_{11}\;a_{12}\;\cdots\;a_{1n};$
$a_{21}\;a_{22}\;\cdots\;a_{1n};$
$\cdots$
$a_{n1}\;a_{n2}\;\cdots\;a_{nn} ]$
요소 간 구분자는 공백 문자. 행 구분자는 세미콜론이다.
다음과 같이 요소 간 구분자로 공백 대신 콤마, 또는 둘 다 써도 된다.
$A = [ a_{11},\;a_{12},\;\cdots,\;a_{1n};$
$a_{21},\;a_{22},\;\cdots,\;a_{1n};$
$\cdots$
$a_{n1},\;a_{n2},\;\cdots,\;a_{nn} ]$
예를 들어 $A = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}$를 생성하려면
$A = [ 1\; 2;\; 3\; 4]$
또는
$A = [ 1\; 2;\;$
$3\; 4]$
를 입력하면 된다.
2. 산술 연산
$x + y$
덧셈
$x - y$
뺄셈
$x / y$
나눗셈
$x * y$
곱셈
$x\hat{ }y$
거듭제곱
① 행렬과 스칼라 연산
$Let\,\,x = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}, y = 2$
$then$
$x + y = \begin{bmatrix}3 & 4\\5 & 6\end{bmatrix}$
$x - y = \begin{bmatrix}-1& 0\\1 & 2\end{bmatrix}$
$x / y = \begin{bmatrix}0.5000 & 1\\1.5000 & 3\end{bmatrix}$
$x\,\,*\,\,y = \begin{bmatrix}2 & 4\\6 & 8\end{bmatrix}$
$x \hat{ } y = \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}$
② 스칼라와 스칼라 연산
$Let\,\,x = 4, y = 2$
$then$
$x + y = 4 + 2 = 6$
$x - y = 4 - 2 = 2$
$x / y = 4 / 2 = 2$
$x * y = 4 * 2 = 8$
$x \hat{ } y = 4^2 = 16$
③ 행렬과 행렬 연산
$x$와 $y$ 모두 행렬이면 거듭제곱 연산은 불가능하다.
행렬의 행렬제곱은 정의되어 있지 않기 때문이다. 그 외의 연산은 똑같이 진행된다.
덧셈 뺄셈의 경우 두 행렬의 크기가 같아야 하며(서로 행 크기가 같고 열 크기도 같아야 한다),
곱셈은 곱셈이 정의될 때(첫 번째 행렬의 열 크기 = 두 번째 행렬의 행 크기일 때)만 가능하다.
나눗셈은 원래 정의되어있지 않지만, Octave에서는 자동으로 역행렬을 곱한다.
$Let\,\,x = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}, y = \begin{bmatrix}5 & 6\\7 & 8\end{bmatrix}$
$then$
$x + y = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix} + \begin{bmatrix}5 & 6\\7 & 8\end{bmatrix} = \begin{bmatrix}1+5 & 2+6\\3+7 & 4+8\end{bmatrix} = \begin{bmatrix}6 & 8\\10 & 12\end{bmatrix}$
$x - y = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix} - \begin{bmatrix}5 & 6\\7 & 8\end{bmatrix} = \begin{bmatrix}1-5 & 2-6\\3-7 & 4-8\end{bmatrix} = \begin{bmatrix}-4 & -4\\-4 & -4\end{bmatrix}$
$x\,/\,y = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix} \times \begin{bmatrix}-4 & 3\\3.5 & -2.5\end{bmatrix}^{-1} = \begin{bmatrix}3 & -2\\2 & -1\end{bmatrix}$
$x\,*\,y = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix} \times \begin{bmatrix}5 & 6\\7 & 8\end{bmatrix} = \begin{bmatrix}19 & 22\\43 & 50\end{bmatrix}$
※ $x \hat{ } y$ -> error: can't do A ^ B for A and B both matrices
(A와 B 모두 행렬이라 A ^ B 연산 불가능)
2. 비교 연산
$x == y$
서로 같으면 1, 아니면 0
$x !=y$
$x ~= y$
서로 같으면 0, 아니면 1(서로 다르면 1, 아니면 0)
$x > y$
$x$가 $y$보다 크면 1, 아니면 0
$x >= y$
$x$가 $y$보다 크거나 같으면 1, 아니면 0
$x < y$
$x$가 $y$보다 작으면 1, 아니면 0
$x <= y$
$x$가 $y$보다 작거나 같으면 1, 아니면 0
① 행렬과 스칼라 연산
행렬의 각 요소와 스칼라를 비교한 결과가 행렬로 반환된다.
$Let\,\,x = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}, y = 2$
$then$
$(x == y) = \begin{bmatrix}1\,==\,2 & 2\,==\,2\\3\,==\,2 & 4\,==\,2\end{bmatrix} = \begin{bmatrix}0 & 1\\0 & 2\end{bmatrix}$
$(x != y) = (x ~= y) = \begin{bmatrix}1\,!=\,2 & 2\,!=\,2\\3\,!=\,2 & 4\,!=\,2\end{bmatrix} = \begin{bmatrix}1 & 0\\1 & 1\end{bmatrix}$
$(x > y) = \begin{bmatrix}1\,>\,2 & 2\,>\,2\\3\,>\,2 & 4\,>\,2\end{bmatrix} = \begin{bmatrix}0 & 0\\0 & 0\end{bmatrix}$
$(x <= y) = \begin{bmatrix}1\,<=\,2 & 2\,<=\,2\\3\,<=\,2 & 4\,<=\,2\end{bmatrix} = \begin{bmatrix}1 & 1\\0 & 0\end{bmatrix}$
② 행렬과 행렬 연산
두 행렬의 크기가 같은 경우에만 가능하다.
A가 3×3, B가 2×2 행렬일 경우 "nonconformant arguments (op1 is 3x3, op2 is 2x2)"라는 메시지가 출력된다.
$Let\,\,x = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}, y = \begin{bmatrix}1 & 1\\ 0 & 0\end{bmatrix}$
$then$
$(x == y) = \begin{bmatrix}1\,==\,1 & 2\,==\,1\\3\,==\,0 & 4\,==\,0\end{bmatrix} = \begin{bmatrix}1 & 0\\0 & 0\end{bmatrix}$
$(x != y) = (x ~= y) = \begin{bmatrix}1\,!=\,1 & 2\,!=\,1\\3\,!=\,0 & 4\,!=\,0\end{bmatrix} = \begin{bmatrix}0 & 1\\1 & 1\end{bmatrix}$
$(x > y) = \begin{bmatrix}1\,>\,1 & 2\,>\,1\\3\,>\,0 & 4\,>\,0\end{bmatrix} = \begin{bmatrix}0 & 1\\1 & 1\end{bmatrix}$
$(x <= y) = \begin{bmatrix}1\,<=\,1 & 2\,<=\,1\\3\,<=\,0 & 4\,<=\,0\end{bmatrix} = \begin{bmatrix}1 & 0\\0 & 0\end{bmatrix}$
3. 논리 연산
- Octave에서는 (C언어와 같이) 0만 거짓이고, 그 외의 값은 모두 참이다.
즉 1은 참의 대표값이고, 0은 거짓의 대표값이자 유일한 값이다.
$x \& y$
$x$와 $y$ 중 하나라도 0이면 0, 아니면 1($x$와 $y$ 둘 다 1이면 1, 아니면 0)
$x | y$
$x$와 $y$ 중 하나라도 1이면 1, 아니면 0($x$와 $y$ 둘 다 0이면 0, 아니면 1)
$!x$
$\sim x$
$x$가 1이면 0, 아니면 0
$x \&\& y$
$x \& y$와 같지만 $x$나 $y$가 행렬이나 벡터일 경우 스칼라로 변환한 후 연산이 진행된다.
이 때 행렬이나 벡터의 각 요소가 전부 1일 때만 1이 반환된다. $x || y$도 마찬가지.
* $all(v)$
$all(v)$ 함수는 벡터 $v$의 요소가 전부 1이면 1을, 아니면 0을 반환한다.
만약 벡터가 아닌 행렬이 주어진다면 각 열이 모두 1이면 1, 아니면 0을 반환한다.
$E.g.$
$all(\begin{bmatrix}1 & 0 & 2 & 0\\4 & 2 & 0 & 0\\3 & 8 & 0 & 0 \end{bmatrix}) = \begin{bmatrix}1 & 0 & 0 & 0\end{bmatrix}$
$all(all(\begin{bmatrix}1 & 0 & 2 & 0\\ 4 & 2 & 0 & 0\\ 3 & 8 & 0 & 0 \end{bmatrix})) = all(1 0 0 0) = 0$
$x\,\&\&\,y$와 $x\,||\,y$에서 $x$나 $y$가 행렬일 경우 행렬인 operand를 $all(all(x))$로 스칼라로 변환한 후 연산이 진행된다.
① 행렬과 스칼라 연산
행렬의 각 요소와 스칼라를 연산한 결과가 행렬로 반환된다.
$Let\,\,x = \begin{bmatrix}1 & 2\\0 & 0\end{bmatrix}, y = 2$
$x\,\&\,y = \begin{bmatrix}1\,\,AND\,\,2 & 2\,\,AND\,\,2\\0\,\,AND\,\,2 & 0\,\,AND\,\,2\end{bmatrix} = \begin{bmatrix}1 & 1\\0 & 0\end{bmatrix}$
$x\,|\,y = \begin{bmatrix}1\,\,OR\,\,2 & 2\,\,OR\,\,2\\0\,\,OR\,\,2 & 0\,\,OR\,\,2\end{bmatrix} = \begin{bmatrix}1 & 1\\1 & 1\end{bmatrix}$
$x\,\&\&\,y = all(all(\begin{bmatrix}1 & 2\\0 & 0\end{bmatrix})) AND 2 = all(\begin{bmatrix}0 & 0\end{bmatrix} AND 2 = 0 AND 2 = 0$
$x\,||\,y = all(all(\begin{bmatrix}1 & 2\\0 & 0\end{bmatrix})) OR 2 = all(\begin{bmatrix}0 & 0\end{bmatrix} OR 2 = 0 OR 2 = 1$
② 행렬과 행렬 연산
비교 연산과 마찬가지로 두 행렬의 크기가 같은 경우에만 가능하다.
예를 들어 A가 3×3, B가 2×2 행렬일 경우 "nonconformant arguments (op1 is 3x3, op2 is 2x2)"라는 메시지가 출력된다.
$Let\,\,x = \begin{bmatrix}1 & 2\\3 & 4\end{bmatrix},\;y = \begin{bmatrix}1 & 3\\ 0 & 0\end{bmatrix}$
$x\,\&\,y = \begin{bmatrix}1\,\,AND\,\,1 & 2\,\,AND\,\,3 \\ 3\,\,AND\,\,0 & 4\,\,AND\,\,0\end{bmatrix} = \begin{bmatrix}1 & 1\\0 & 0\end{bmatrix}$
$x\,|\,y = \begin{bmatrix}1\,\,OR\,\,1 & 2\,\,OR\,\,3\\3\,\,OR\,\,0 & 4\,\,OR\,\,0\end{bmatrix} = \begin{bmatrix}1 & 1\\1 & 1\end{bmatrix}$
③ 부정 연산
$Let\,\,x = \begin{bmatrix}1 & 2\\0 & 0\end{bmatrix}, y = 2$
$!x = \sim x = \begin{bmatrix}!1 & !2\\!0 & !0\end{bmatrix} = \begin{bmatrix}0 & 0\\1 & 1\end{bmatrix}$
$!y = \sim y = !2 = 0$
4. 대입 연산
$x = y$
$y$를 $x$에 대입(할당, assignment)한다.
$x += y$
$x = x + y$와 같다($x$에 $x + y$를 대입).
$x -= y$
$x = x - y$와 같다.
$x *= y$
$x = x * y$와 같다.
$x /= y$
$x = x / y$와 같다.
$x \,\hat{ }\,= y$
$x = x\,\hat{ }\,y$와 같다.
5. 증감 연산
$x++$
$++x$
$x--$
$--x$
C나 Java 등의 프로그래밍 언어의 증감 연산자와 동일한 기능을 한다.
6. Semicolon
다른 여러 프로그래밍 언어들과 달리 Octave의 경우 세미콜론이 있어도 되고 없어도 된다.
다만 차이가 있는데, 세미콜론이 있으면 실행 결과를 보여주지 않는다는 것이다.
세미콜론 없이 $x\;=\;5$를 입력할 경우 $x$에 $5$가 대입되어 $x$ 값이 $5$임을 보여준다.
하지만 뒤에 세미콜론을 붙여 $x\;=\;3$을 입력할 경우 $x$ 값을 보여주지 않는다.
'Machine Learning' 카테고리의 다른 글
Octave: 제어문 (0) | 2021.02.27 |
---|---|
Octave: Utility (0) | 2021.02.23 |