Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 데비안
- 목록처리
- 티스토리 쿠키 삭제
- 이터레이터
- 알파회계
- 코드로배우는스프링웹프로젝트
- network configuration
- 서버설정
- 네트워크 설정
- baeldung
- 페이징
- 스프링 시큐리티
- 코드로배우는스프링부트웹프로젝트
- 선형대수
- 처음 만나는 AI 수학 with Python
- 자료구조와함께배우는알고리즘입문
- 자바편
- 리눅스
- /etc/network/interfaces
- resttemplate
- d
- GIT
- Kernighan의 C언어 프로그래밍
- iterator
- 친절한SQL튜닝
- 자료구조와 함께 배우는 알고리즘 입문
- 스프링부트핵심가이드
- 처음 만나는 AI수학 with Python
- ㅒ
- 구멍가게코딩단
Archives
- Today
- Total
bright jazz music
선형대수: 13. 표준기저 (Standard basis) 본문
표준기저(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]
참고: 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)
'Math > 선형대수' 카테고리의 다른 글
선형대수: 14. 고윳값과 고유벡터, 그리고 고유 방정식 (2) (0) | 2022.08.02 |
---|---|
선형대수: 14. 고윳값과 고유벡터, 그리고 고유 방정식 (1) (0) | 2022.08.02 |
선형대수: 12. 선형변환(linear transformation) (0) | 2022.07.30 |
선형대수: 11. 벡터 그리기 (화살표 그리기) (0) | 2022.07.30 |
선형대수: 10. 역행렬(inverse matrix)과 행렬식(determinant) (0) | 2022.07.29 |
Comments