Link Search Menu Expand Document

2.Q.1 Quiz 1

Linear Algebra : Quiz 1

Edited by / 장성준 (junnei) junnei

- numpy - matplotlib - paths: - ../../assets/python/assignment/week2-1/grading.py

! 잠깐 !

  • 본 페이지의 예제 코드에서는 실행되지 않는 기능이 빠져있을 수 있습니다.

  • 아래 링크를 통해 본 페이지보다 원활한 과제 진행 환경을 경험해보세요.



Week 2-1

Linear Algebra 1

선형대수(Linear Algebra)는 벡터와 벡터공간, 벡터를 다루는 방법들을 연구하는 대수학의 한 분야이다.

여러 머신 러닝 알고리즘들, 특히 딥러닝 알고리즘들을 이해하고 사용하려면 선형대수를 잘 알아야할 필요가 있다.

import libraries


import numpy as np
from grading import *
print("done")

기하학적 벡터(GEOMETRIC VECTORS)

선형대수에 본격적으로 들어가기에 앞서, 가장 필수적인 개념인 벡터에 대해 먼저 소개를 하려고 한다.

보통 학교에서 배우고, 우리가 일반적으로 알고있는 벡터는 기하 벡터(geometric vector)라고 불리우며, 다음과 같이 표현한다.

\[\vec {x}, \vec {y}\]

이 책에서 다루는 벡터는 보다 일반적인 관점에서의 벡터를 의미하는데, 다음과 같이 굵은 글자를 사용하여 표현한다.

\[\boldsymbol {x}, \boldsymbol {y}\]

다음과 같은 코드를 통해 기하학적 벡터(geometric vector)를 경험해보자.

2D Geometric Vector


## vector = [x,y, u,v]
## vector starts from (x,y), size of (u, v)


### START CODE HERE

vector1 = np.array([-10,-10,4,5])
vector2 = np.array([10,10,-4,-10])

### END CODE HERE

vectors = np.array([vector1, vector2, vector1 + vector2])
vectors


from matplotlib import pyplot as plt
fig, ax = plt.subplots()
ax.quiver(vectors[:,0],vectors[:,1], vectors[:, 2]-vectors[:,0], vectors[:,3]-vectors[:,1], color=['black', 'red', 'green'], angles='xy', scale_units='xy', scale=1)
fig

3D Geometric Vector

다음 링크에서 실행해 볼 수 있습니다.

행렬의 계산

행렬 $A \in \mathbb{R}^{m \times n} $ 와 $B \in \mathbb{R}^{m \times n} $ 의 합은 요소별(element-wise)로 이루어지며 다음과 같이 정의된다.

\[A + B := \begin{bmatrix} a_{11} + b_{11} & \cdots & a_{1n} + b_{1n}\\\vdots & & \vdots \\a_{m1} + b_{m1} & \cdots & a_{mn} + b_{mn}\\ \end{bmatrix} \in \mathbb{R}^{m \times n}\]


행렬 $A \in \mathbb{R}^{m \times n}$ 와 $B \in \mathbb{R}^{n \times k}$ 의 곱은 $ A \cdot B = C \in \mathbb{R}^{m \times k}$ 로 표현되며, 요소 $c_{ij}$ 는 다음과 같이 계산된다.

\[c_{ij} = \sum_{l=1}^{n} a_{il}b_{lj} ,\qquad i = 1,\dots,m,\quad j = 1,\dots,k.\]

다음 코드를 완성해 행렬 $A \in \mathbb{R}^{m \times n} $ 와 $B \in \mathbb{R}^{m \times n} $ 의 합과 곱을 구하는 함수를 작성하라.

Exercise 1 : 행렬의 합(Matrix Addition)


def matrix_addition(A, B):
    
    # C = A + B
    ### START CODE HERE
 
    ### END CODE HERE
    return C


grading_matrix_addition(matrix_addition)

Exercise 2 : 행렬의 곱(Matrix Multiplication)


def matrix_multiplication(A, B):
    
    # C = A • B
    ### START CODE HERE

    ### END CODE HERE
    return C


grading_matrix_multiplication(matrix_multiplication)

Exercise 3 : 아다마르 곱(Hadamard product)

같은 크기의 두 행렬의 각 성분을 곱하는 연산으로 아다마르 곱이 존재한다.

즉, 요소별 계산(element-wise operation)을 하며 아다마르곱은 덧셈에 대하여 분배 법칙을 따르고 다음과 같이 표현된다.

\[M \bigcirc N = \begin{bmatrix} M_{11}N_{11}&M_{12}N_{12}&\dotsm &M_{1n}N_{1n}\\ M_{21}N_{21}&M_{22}N_{22}&&M_{2n}N_{2n}\\ \vdots &&\ddots &\vdots \\ M_{m1}N_{m1}&M_{m2}N_{m2}&\dotsm &M_{mn}N_{mn} \end{bmatrix} \in \operatorname {Mat} (m,n;R)\]

다음 코드를 완성해 행렬 $A \in \mathbb{R}^{m \times n} $ 와 $B \in \mathbb{R}^{m \times n} $ 의 아다마르곱을 구하는 함수를 작성하라.



def hadamard_product(A, B):

    # C = A  ⃝ B
    ### START CODE HERE

    ### END CODE HERE
    return C


grading_hadamard_product(hadamard_product)

역행렬과 전치행렬

Exercise 4 : 역행렬(Inverse)

정사각행렬 $A$ 와 $B$ 가 $AB = I_{n} = BA$ 를 만족할 때 $(\;단, \; A \in \mathbb{R}^{n \times n}, \; B \in \mathbb{R}^{n \times n}\;)$

$B$ 를 $A$ 의 역행렬(Inverse) 이라 하고, $A^{-1}$ 라고 표현한다.

역행렬을 구하는 함수를 만들어보자.



def inverse(A):
    
    # B = A^(-1)
    ### START CODE HERE

    ### END CODE HERE
    return B


grading_inverse(inverse)

Exercise 5 : 전치행렬(Transpose)

행렬 $A$, $B$ 의 각각의 요소가 $a_{ij} = b{ji}$ 일 때, $B$ 를 $A$ 의 전치행렬이라고 하며, $B = A^{T}$ 라고 한다. $( \; A \in \mathbb{R}^{m \times n}, \; B \in \mathbb{R}^{n \times m} \; )$

일반적으로, $A$ 의 열을 $A^{T}$ 의 행에 나열해서 $A^{T}$ 를 얻을 수 있다.

전치행렬을 구하는 함수를 만들어보자.



def transpose(A):

    # B = A.T
    ### START CODE HERE

    ### END CODE HERE
    return B


grading_transpose(transpose)

Exercise 6 : 대칭행렬(Symmetric Matrix)

대칭행렬은 정사각행렬에서 대각선에 대칭인 두 원소가 같은 행렬을 말한다.

즉, 정사각행렬의 원소 $a_{ij}$ 와 원소 $a_{ji}$ 가 같은 행렬이다 : $A = A^{T} ( \; 단, \; A \in \mathbb{R}^{n \times n} \; )$

임의의 두 대칭행렬의 합은 항상 대칭행렬이라는 특징이 있다.

행렬을 입력받아 대칭행렬인지 확인하는 함수를 만들어보자.



def is_symmetric(A):

    # is_symmetric = bool (True or False)
    ### START CODE HERE
    
    ### END CODE HERE
    return is_symmetric


grading_is_symmetric(is_symmetric)


'선형대수' 카테고리의 다른 글
  1. 선형 매핑
  2. 아핀 공간
  3. 선형대수 과제 1