# 2. Linear Algebra_3. Matrix

Matrix는 Systems of Linear Equation을 compact하게 표현해주는 것 뿐만 아니라, Linear functions(Linear mapping)의 역할도 수행하는 중요한 개념이다.

Matrix는 연산 시, element-wise 연산을 기본적으로 수행한다. vector와 matrix간 연산도 마찬가지이다.

단, 연산 시 행과 열의 숫자에 주의해야 한다


```python
A = np.array([[1,2,3],[3,4,5],[5,6,7]])
v = np.array([[1],[2],[3]])
B = np.array([[10,20,30],[30,40,50],[50,60,70]])
```


```python
A@B
```




    array([[220, 280, 340],
           [400, 520, 640],
           [580, 760, 940]])




```python
B@A
```




    array([[220, 280, 340],
           [400, 520, 640],
           [580, 760, 940]])




```python
A@v
```




    array([[14],
           [26],
           [38]])




```python
# 연산 시, 행과 열의 숫자가 맞지 않아 오류가 난 경우이다.
# v = (3,1), A = (3,3) 이므로 v@A는 연산수행이 불가능하다.

v@A
```

Matrix는 Associativity(결합법칙), Distributivity(분배법칙)이 성립한다. 단, **교환법칙은 성립하지 않는다.**

행렬의 곱셈은 곱하는 행렬의 순서를 바꾸는 교환 법칙이 성립하지 않는다. 그러나 덧셈에 대한 분배 법칙은 성립한다. 

$$ 
\begin{align}
AB \neq BA  
\tag{2.2.53}
\end{align}
$$

$$ 
\begin{align}
A(B + C) = AB + AC  
\tag{2.2.54}
\end{align}
$$

$$ 
\begin{align}
(A + B)C = AC + BC  
\tag{2.2.55}
\end{align}
$$


$A$, $B$, $C$가 다음과 같을 때 위 법칙을 넘파이로 살펴보자.

$$
\begin{align}
A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}
\tag{2.2.56}
\end{align}
$$

$$
\begin{align}
B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix}
\tag{2.2.57}
\end{align}
$$

$$
\begin{align}
C = \begin{bmatrix} 9 & 8 \\ 7 & 6 \end{bmatrix}
\tag{2.2.58}
\end{align}
$$


```python
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = np.array([[9, 8], [7, 6]])
```

$AB$ 와 $BA$의 값은 다음처럼 다른 값이 나오므로 교환법칙이 성립하지 않음을 알 수 있다.


```python
A@B
```




    array([[19, 22],
           [43, 50]])




```python
B@A
```




    array([[23, 34],
           [31, 46]])




```python
A@B == B@A
```




    array([[False, False],
           [False, False]])



분배법칙은 다음과 같이 성립한다.


```python
A @ (B + C) == A@B + A@C
```




    array([[ True,  True],
           [ True,  True]])



Identity Matrix(항등행렬)도 존재한다. Identity Matrix는 "N x N matrix which contains '1' on the diagonal and '0' everywhere else" 로 정의된다.

Numpy의 eye 메소드를 통해 구현 가능하다.


```python
np.eye(3)
```




    array([[1., 0., 0.],
           [0., 1., 0.],
           [0., 0., 1.]])



이러한 identity matrix는 역행렬을 정의하는 데 활용된다.

$$ AB = BA = I, B = A^{-1}$$


```python
A
```




    array([[1, 2],
           [3, 4]])




```python
A_inverse = np.linalg.inv(A)
A_inverse
```




    array([[-2. ,  1. ],
           [ 1.5, -0.5]])




```python
A@A_inverse
```




    array([[1.00000000e+00, 1.11022302e-16],
           [0.00000000e+00, 1.00000000e+00]])



이 밖에도 대칭행렬 등 다양한 행렬이 존재하며, 이후 행렬연산을 통한 Linear Equation problem 해결 및 problem solving 을 수행할 수 있다.

812e523fab2bf213cf4dfcdcae5e07cbae28eb6d
ipynb
Jupyter Notebook
1.Study/2. with computer/1.Math_code/5. Mathematics for Machine Learning/2. Linear Algebra_3. Matrix.ipynb
jskim0406/Study
07b559b95f8f658303ee53114107ae35940a6080
MIT
1.Study/2. with computer/1.Math_code/5. Mathematics for Machine Learning/2. Linear Algebra_3. Matrix.ipynb
jskim0406/Study
07b559b95f8f658303ee53114107ae35940a6080
MIT
1.Study/2. with computer/1.Math_code/5. Mathematics for Machine Learning/2. Linear Algebra_3. Matrix.ipynb
jskim0406/Study
07b559b95f8f658303ee53114107ae35940a6080
MIT
Qwen/Qwen-72B
1. YES
2. YES