제 1장 기초 선형대수¶
선형대수(linear algebra)는 벡터 공간, 벡터, 선형 변환, 연립 선형 방정식 등을 연구하는 대수학의 한 분야로,
간단히 말해서 벡터와 행렬을 다루는 수학의 한 분야라고 할 수 있다.
여기에서 선형(linear)이라는 단어는
일차식이나 일차함수와 같이 그래프가 직선(line)으로 나타나는 관계를 다룬다는 뜻이다.
이러한 관계는 벡터와 행렬로 표현할 수 있다.
선형대수는 수학이론으로서뿐만 아니라, 물리학, 양자역학, 공학, 경제학, 사회과학 등 많은 분야에서 널리 사용되는 중요한 도구이다.
1.1 데이터의 형식과 기본 연산¶
다양한 현상을 측정하여 양(quantity)으로 나타낸 데이터를
수학적인 형식으로 표현하여 수학 연산을 이용함으로써
복잡한 계산과 연구가 가능하다.
스칼라, 벡터, 행렬, 텐서의 개념과 기본 연산¶
스칼라, 벡터, 행렬, 텐서의 개념¶
- 스칼라(scalar): 하나의 실수 값
- 벡터(vector): 몇 개의 성분이 가로 또는 세로로 표현된 것
(여기에서 성분은 흔히 실수나 실수값을 가지는 문자를 말한다.
더 일반적으로는, 다양한 대상을 성분으로 배열한 벡터를 생각할 수 있다.)
- 행벡터(row vector): $\begin{bmatrix} 1 & 2 & 3\end{bmatrix}$와 같이 몇 개의 성분이 가로로 표현된 것
- 열벡터(column vector): $\begin{bmatrix} 1 \\ 2 \\ 3\end{bmatrix}$와 같이 몇 개의 성분이 세로로 표현된 것
- 행렬: 여러 성분을 가로와 세로로 줄을 맞추어 2차원의 직사각형 모양으로 배열한 것
- 행렬의 예: $A = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1,n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix}$
- 가로줄을 행, 세로줄을 열이라고 부른다.
- $a_{ij}$는 $i$번째 행의 $j$번째 성분을 나타낸다.
- 여기에서 $m \times n$을 행렬의 모양(shape of a matrix) 또는 행렬의 크기(size of a matrix)라고 부른다.
- $m=n$인 행렬을 정사각 행렬이라고 함. 예를 들어, $B = \begin{bmatrix} 1 & 2 \\ 3 & 4\end{bmatrix}$는 행렬모양이 $2\times 2$인 정사각행렬임
- 정사각행렬에서 성분 $a_{11}, a_{22}, \cdots, a_{nn}$이 놓인 대각선을 주대각선이라 함.
- 텐서: 성분들을 일반적인 $n$차원으로 배열한 것. (성분들을 2차원으로 배열한
행렬의 일반화)
- 예를 들어, 3차원 텐서는 가로, 세로, 높이의 세 방향이 있는 직육면체 모양으로 성분을 배열한 것을 말한다.
- 이러한 3차원 텐서를 표현할 때 $T=\left[ a_{kij} \right]_{l\times m \times n}$로 나타내고,
텐서의 크기(또는 모양)는 $l\times m \times n$이라고 한다. ($m \times n$행렬을 $l$겹으로 배열한 것이라고 생각할 수 있다)
(위 그림의 텐서의 차원은 3이고, $T=\left[ a_{kij} \right]_{l\times m \times n}$로 나타내며, 크기는 $3\times 3 \times 4$이다.)
- 차원을 계속 높여, 일반적인 $n$차원 텐서를 $S=\left[ a_{i_1 i_2 \cdots i_n} \right]_{m_1\times m_2\times\cdots\times m_n}$으로 나타낼 수 있다.
- 스칼라는 0차원 텐서, 벡터는 1차원 텐서, 행렬은 2차원 텐서이다.
- 딥러닝에서는 이러한 텐서를 이용하여 연산을 수행함으로써 모델을 학습시킨다.
예제 1.1.1 $A=\begin{bmatrix} 7 & -3 & 4 \\ -5 & 2 & 1 \end{bmatrix}$, $B=\begin{bmatrix} 1 & -4 \\ 0 & 3 \end{bmatrix}$, $\mathbf{u}=\begin{bmatrix} 2.5 \\ 1 \\ -0.5 \end{bmatrix}$, $\mathbf{v}=\begin{bmatrix} 1 & 0 & -2 \end{bmatrix}$ 에 대하여 다음을 구하시오.
(1) 각 행렬의 크기 (2) 행렬 $A$의 2행 1열의 성분 (3) 행렬 $B$의 주대각선의 성분의 합
[풀이]
(1) $A$는 $2\times3$ 행렬, $B$는 $2\times2$ 행렬, $\mathbf{u}$는 $3\times1$ 행렬, $\mathbf{v}$는 $3\times1$ 행렬
(2) $-5$
(3) $1+3=4$
[풀이 끝]
예제 1.1.2 $a_{kij}=2k+i-j$ 일 때, 텐서 $T=\left[ a_{kij} \right]_{2\times 2 \times 3}$ 에 대하여 다음을 구하시오.
(1) 텐서 $T$의 차원 (2) 텐서 $T$의 성분의 개수 (3) $k=1$인 모든 성분의 합 (4) 텐서 $T$의 모든 성분의 합
[풀이]
(1) 3차원
(2) $2\times2\times3=12$개
(3) $a_{111}=2+1-1=2$, $a_{112}=2+1-2=1$, $a_{113}=2+1-3=0$,
$a_{121}=2+2-1=3$, $a_{122}=2+2-2=2$, $a_{123}=2+2-3=1$
따라서 $k=1$인 모든 성분의 합은 $2+1+0+3+2+1=9$ 이다.
(4) $k=2$인 성분 6개는 $a_{2ij}=4+i-j=2+a_{1ij}$ 이므로 $k=2$인 모든 성분의 합은 $9+2\times6=21$ 이다.
따라서 텐서 $T$의 모든 성분의 합은 $9+21=30$ 이다.
[풀이 끝]
파이썬 예제 1.1.3
벡터, 행렬, 텐서를 나타내기 위하여, 여기에서는 NumPy (Numerical Python) 라이브러리의 array 함수를 사용한다.
array의 성분의 번호는 0부터 시작함을 유의하여 벡터, 행렬, 텐서의 성분을 불러오는 방법을 연습해보자.
그리고 벡터의 길이, 즉 성분의 개수를 알려주는 len 함수와
일반적인 텐서의 모양을 알려주는 shape 함수,
또 텐서의 차원을 알려주는 ndim 함수도 사용해보자.
[풀이]
import numpy as np
x = np.array([1,2,3])
print(x)
print(x[0])
print(x[1])
print(x[2])
print(len(x))
print(x.shape)
print(x.ndim)
[1 2 3] 1 2 3 3 (3,) 1
import numpy as np
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(A)
print(A[0,0])
print(A[0,1])
print(A[2,1])
print(A.shape)
print(A.ndim)
[[1 2 3] [4 5 6] [7 8 9]] 1 2 8 (3, 3) 2
import numpy as np
T = np.array([[[1,2,3],[4,5,6],[7,8,9]],[[10,11,12],[13,14,15],[16,17,18]]])
print(T)
print(T[0,0,0])
print(T[0,0,1])
print(T[1,2,1])
print(T.shape)
print(T.ndim)
[[[ 1 2 3] [ 4 5 6] [ 7 8 9]] [[10 11 12] [13 14 15] [16 17 18]]] 1 2 17 (2, 3, 3) 3
[풀이 끝]
같은 행렬이라는 개념¶
정의:
두 행렬 $A$와 $B$의 모양이 같고, 같은 위치의 성분이 모두 같을 때,
즉 $A=[a_{ij}]_{m\times n}$, $B=[b_{ij}]_{m\times n}$이고,
모든 $i=1,2,\cdots, m$과 $j=1,2,\cdots, n$에 대하여 $a_{ij}=b_{ij}$가 성립할 때,
$A$와 $B$는 같은 행렬이라고 하며, $A=B$로 나타낸다.
이 조건이 성립하지 않으면 두 행렬은 서로 다르다고 한다. 모양이 다른 행렬은 당연히 서로 다르다.
예제 1.1.4 두 행렬 $A=\begin{bmatrix} a & 1 \\ 0 & b \end{bmatrix}$, $B=\begin{bmatrix} 2 & c \\ d & 3 \end{bmatrix}$에 대하여 $A=B$가 성립하기 위한 실수 $a$, $b$, $c$, $d$의 값을 말하시오.
[풀이]
$a=2$, $b=3$, $c=1$, $d=0$
[풀이 끝]
파이썬 예제 1.1.5
NumPy 라이브러리의 array_equal 함수를 사용하여 두 행렬이 같은 지 알아보자.
비교할 행렬의 예로, 성분이 0과 1만 등장하는 $2\times3$ 행렬 2개를 무작위로(random) 생성하여 사용해보자.
[풀이]
import numpy as np
A = np.random.randint(2, size=(2,3))
B = np.random.randint(2, size=(2,3))
print("A=", A)
print("B=", B)
np.array_equal(A,B)
A= [[0 0 1] [1 0 0]] B= [[0 0 0] [1 1 0]]
False
[풀이 끝]
스칼라, 벡터, 행렬, 텐서의 기본 연산¶
행렬의 합과 스칼라 곱¶
- 크기가 같은 두 행렬 $A= [a_{ij}]_{m\times n}$, $B=[b_{ij}]_{m\times n}$ 에 대하여 행렬의 합을 $A+B = [ a_{ij} + b_{ij}]_{m\times n}$ 로 정의한다.
- 행렬 $A=[a_{ij}]$에 스칼라(실수) $c$를 곱(multiple)한 $cA$는 행렬 $A$의 모든 성분에 $c$를 곱하여 만든 행렬이다. 즉, $cA=[c\,a_{ij}]$ 이다.
- 벡터는 $m=1$ 또는 $n=1$인 행렬이므로 벡터의 합과 스칼라 곱도 행렬과 같은 방법으로 정의한다.
- 일반적으로 텐서의 합과 스칼라 곱도 행렬과 같은 방법으로 정의한다.
- 두 행렬의 모양이 같은 경우에만 합이 정의됨
예를 들어, $A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}$, $B= \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}$인 경우, 행렬 모양이 다르므로 합이 정의되지 않음
- 실수의 연산과 마찬가지로, $(-1)A=-A$, $(-c)A=-cA$ 로 쓰며, $A+(-B)=A-B$ 로 나타내어 벡터나 행렬의 뺄셈을 정의한다.
행렬의 합과 스칼라 곱에 대한 연산 법칙¶
같은 크기의 행렬 $A$, $B$, $C$와 영행렬 $\mathbf{0}$에 대하여 다음 연산 법칙이 성립한다. (여기에서 영행렬이란 모든 성분이 다 0인 행렬을 말한다.)
- $A+B=B+A$ (덧셈의 교환법칙)
- $(A+B)+C=A+(B+C)$, 간단히 $A+B+C$로 나타냄. (덧셈의 결합법칙)
- $A+\mathbf{0}=A$ (덧셈의 항등원)
- $A+(-A)=\mathbf{0}$ (덧셈의 역원)
그리고 행렬의 스칼라곱에 대하여 다음과 같은 연산 법칙이 성립한다. (여기에서 $c$, $k$는 스칼라(실수)를 나타낸다.)
- $c(A+B)=cA+cB$ (스칼라곱의 분배법칙)
- $(c+k)A=cA+kA$ (스칼라에 대한 벡터의 분배법칙)
- $c(kA)=(ck)A$, 간단히 $ckA$로 나타냄. (스칼라곱의 결합법칙)
- $1A=A$ (스칼라곱의 항등원)
예제 1.1.6 $A=\begin{bmatrix} 2 & -1 & 1 \\ -1 & 3 & 4 \end{bmatrix}$, $B=\begin{bmatrix} -1 & 2 & -3 \\ 2 & 0 & -1 \end{bmatrix}$, ${\bf x}=[\begin{array}{cccc} 3 & 1 & -2 & 4 \end{array}]$, ${\bf y}=[\begin{array}{cccc} -1 & -3 & 5 & 1 \end{array}]$ 에 대하여 다음을 구하시오.
(1) $A+B$ (2) ${\bf x}-{\bf y}$ (3) $A+(2B-3A)$
[풀이]
(1) $A+B=\begin{bmatrix} 1 & 1 & -2 \\ 1 & 3 & 3 \end{bmatrix}$
(2) ${\bf x}-{\bf y}=[\begin{array}{cccc} 4 & 4 & -7 & 3\end{array}]$
(3) $A+(2B-3A)=2B-2A=2(B-A)=\begin{bmatrix} -6 & 6 & -8 \\ 6 & -6 & -10 \end{bmatrix}$
[풀이 끝]
파이썬 예제 1.1.7 NumPy 라이브러리의 array 함수와 내장된 기본연산 $+$, $-$, $*$을 사용하여 행렬의 합과 스칼라곱을 구해보자.
(아래에서 \n 이라는 표현은 출력 시 실행결과 뒤에 한 줄을 띄워 보기 쉽게 하기위하여 사용하였다.)
[풀이]
import numpy as np
A = np.array([[2,-1,1],[-1,3,4]])
B = np.array([[-1,2,-3],[2,0,-1]])
x = np.array([3,1,-2,4])
y = np.array([-1,-3,5,1])
print(A+B)
print(x-y, '\n')
print(A+(2*B-3*A))
[[ 1 1 -2] [ 1 3 3]] [ 4 4 -7 3] [[ -6 6 -8] [ 6 -6 -10]]
[풀이 끝]
1.1 (part 1) 연습문제 과제¶
- 먼저 이 강의의 jupyter notebook 파일에서 예제 1.1.1, 예제 1.1.2, 파이썬 예제 1.1.3, 예제 1.1.4, 파이썬 예제 1.1.5, 예제 1.1.6, 파이썬 예제 1.1.7 부분만 뽑아서 새로운 파일로 저장하세요.
- 과제는 이 문제들 각각에 대하여 일부분(숫자, 문자, 함수 등)을 바꾸어 새로운 문제를 만들고 풀이를 써서 jupyter notebook 파일로 제출하는 것입니다.
'Math > SW&AI 전공 진입을 위한 수학(K-MOOC)' 카테고리의 다른 글
| 1-1_데이터의 형식과 기본 연산 (part 3) (0) | 2022.09.13 |
|---|---|
| 1-1_데이터의 형식과 기본 연산 (part 2) (0) | 2022.09.13 |
| 1-0_Orientation (0) | 2022.09.13 |