관리 메뉴

bright jazz music

선형대수: 13. 표준기저 (Standard basis) 본문

Math/선형대수

선형대수: 13. 표준기저 (Standard basis)

bright jazz music 2022. 8. 1. 08:24

표준기저(Standard basis)

  • 표준기저를 이용하여 벡터를 일반적인 식의 형태로 표현할 수 있다.
  • 벡터는 '표준기저와 상수의 곱의 합'으로 표현할 수 있다.
  • 표준기저는 다음과 같다.

 

LaTeX 수식
$\vec e_{x} = \begin{pmatrix} 1 \\ 0 \end{pmatrix}$
$\vec e_{y} = \begin{pmatrix} 0 \\ 1 \end{pmatrix}$

 

  • 이 때 벡터 a는 아래와 같이 나타낼 수 있다.
LaTeX 수식
$\vec a = \begin{pmatrix} 2 \\ 3 \end{pmatrix} = 2\begin{pmatrix} 1 \\ 0 \end{pmatrix} + 3\begin{pmatrix} 0 \\ 1 \end{pmatrix} =  2\vec e_{x} + 3\vec e_{y}$

위와 같이 벡터는 '표준기저와 상수의 곱'의 합으로 표현할 수 있다.

 

 

파이썬에서의 표준기저 사용

  • 표준기저는 Numpy의 array([ ])를 사용한다. 표준기저만을 위한 함수는 존재하지 않는다.
import numpy as np
import matplotlib.pyplot as plt

a = np.array([2, 3])
e_x = np.array([1, 0])  #표준기저
e_y = np.array([0, 1])  #표준기저

print("a:", a)
print("e_x:", e_x)
print("e_y:", e_y)


def arrow(start, size, color):
    plt.quiver(start[0], start[1],
               size[0], size[1],
               angles="xy", scale_units="xy", scale=1,
               color=color)

s = np.array([0, 0])    #원점

arrow(s, a, color="blue")       #벡터a의 화살표
arrow(s, e_x, color="black")    #표준기저 e_x의 화살표
arrow(s, e_y, color="black")    #표준기저 e_y의 화살표

#그래프 표시
plt.xlim([-3, 3])       #x의 표시 범위
plt.ylim([-3, 3])       #y의 표시 범위
plt.xlabel("x", size=14)    #레이블
plt.ylabel("y", size=14)    #레이블
plt.grid()          #격자 표시
plt.gca().set_aspect("equal")   #가로세로비 동일

plt.show()  #그래프 생성


# a: [2 3]
# e_x: [1 0]
# e_y: [0 1]

 

 

 

 

표준기저를 이용한 벡터의 일반적인 표현

LaTeX 수식
$\vec a = \sum_{j=1}^m r_{j}\vec{e}_{j}$
 
  • r_{j}는 상수이다.
  • \vec{e}_{j}는 표준기저이다.

 

이 벡터a에 아래의 (nxm) 행렬 A를 곱해서 선형변환을 실시한다.

 

LaTeX 수식
$ \vec{b} = A\vec{a} $
  • 벡터 a에 행렬 A를 곱해 새로운 벡터 b로 변환되었다.
  • 이렇게 구해진 벡터 b는 표준기저를 통해 아래와 같이 나타낼 수 있다.
LaTeX 수식
$\vec{b} = \sum_{k=1}^n s_{k}\vec{e}_{k}$
 
  • 이 때 s_{k}는 아래와 같다.

 

LaTeX 수식
$s_{k} = \sum_{j=1}^m r_{j} a_{kj}$
  • s_{k}는 벡터b의 각 표준기저에 곱하는 상수이다.
  • 이처럼 벡터b의 각 요소는 곱의 총합의 형태로 표현된다.
  • 이 선형변환의 성질을 이용하여 뉴럴 네트워크에서는 의사적인 신경세포에 대한 여러 개의 입력에 가중치를 곱한 총합을 계산한다.

 

  • 또한 행렬A의 n과 m이 같으면, 즉 행과 열 수가 같으면 A는 정방행렬이 된다.
  • 만약 A가 정방행렬이 아니면 벡터는 선형변환 시 요소의 개수가 변한다.
  • 아래의 예에서 벡터에 정방행렬이 아닌 행렬이 아닌 행렬을 곱했을 때 벡터의 요소 수가 2에서 3으로 변하는 것을 알 수 있다.

벡터가 앞 행렬의 행 수와 동일한 요소 수를 갖게 되었다.

 

실습

#행렬 A를 사용하여 벡터 a를 벡터b로 선형변환할 것.
#벡터 a와 벡터 b를 화살표로 그래프 상에 표시할 것

import numpy as np
import matplotlib.pyplot as plt

a = np.array([1, 3])    #변환 전의 벡터

A = np.array([[1, -1],
              [2, -1]])

b = np.dot(A, a)    #선형변환 후의 벡터 b

print("a:", a)
print("b:", b)

#화살표 그리기
def arrow(start, size, color):
    plt.quiver(start[0], start[1],
               size[0], size[1],
               angles="xy", scale_units="xy", scale=1,
               color=color)

s = np.array([0, 0])    #원점

arrow(s, a, color="black")
arrow(s, b, color="orange")

#그래프 표시
plt.xlim(-3, 3)
plt.ylim(-3, 3)

plt.xlabel("x", size=14)
plt.ylabel("y", size=14)

plt.grid()
plt.gca().set_aspect("equal")
plt.show()

# a: [1 3]
# b: [-2 -1]

 

검은색 선: 벡터a, 오렌지 선: 벡터 b

 

 

 

 

 

 

 

 

 

 

참고: https://ko.wikipedia.org/wiki/%EA%B8%B0%EC%A0%80_(%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99)

Comments