선형대수의 기초 개념과 파이썬 numpy로 구현해보는 내용을 정리해보았다.
데이터의 유형
1) 스칼라(scalar)
•
실수인 숫자 하나로 이루어진 데이터
2) 벡터(vector)
•
여러 개의 숫자가 특정한 순서대로 모여있는 것
import numpy as np
x = np.array([[1], [3], [2], [4]])
x
Python
복사
array([[1],
[3],
[2],
[4]])
3) 행렬(matrix)
•
벡터들의 모임, 2D array of numbers
A = np.array([[11, 12, 13], [21, 22, 23]])
A
Python
복사
array([[11, 12, 13],
[21, 22, 23]])
전치연산(transpose)
•
행렬의 행과 열을 바꾸는 연산
•
벡터나 행렬에 $T$라는 위첨자(super-script)를 붙여서 표기
# T는 method가 아닌 attribute이므로 소괄호()를 붙여서 호출하지 않는다.
A.T
Python
복사
array([[11, 21],
[12, 22],
[13, 23]])
특수한 벡터와 행렬
1) 영벡터
•
모든 원소가 0인 N차원 벡터
2) 일벡터
•
모든 원소가 1인 N차원 벡터
3) 정방 행렬(square matrix)
•
행의 개수와 열의 개수가 같은 행렬
4) 대각 행렬(diagonal matrix)
•
모든 비대각(off-diagonal) 요소가 0인 정방 행렬
•
numpy에서는 diag 명령을 사용
np.diag([1, 2, 3])
Python
복사
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
5) 단위 행렬(identity matrix)
•
모든 대각 성분의 값이 1인 대각 행렬
•
numpy에서는 identity, 혹은 eye 명령을 사용
np.identity(3)
Python
복사
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
np.eye(4)
Python
복사
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
6) 대칭 행렬(symmetric matrix)
•
정방 행렬 중 전치 행렬과 원래의 행렬이 같은 행렬
•
벡터와 행렬의 연산
1) 벡터와 행렬의 덧셈과 뺄셈
•
같은 크기의 벡터와 행렬에서 계산이 가능하며, 같은 위치의 원소끼리(element-wise) 더하거나 뺌
x1 = np.array([1, 2, 3, 4, 5])
x2 = np.array([6, 7, 8, 9, 10])
Python
복사
x1 + x2
Python
복사
array([ 7, 9, 11, 13, 15])
x2 - x1
Python
복사
array([5, 5, 5, 5, 5])
2) 스칼라와 벡터/행렬의 곱셈
•
벡터()나 행렬()의 모든 원소에 스칼라()를 곱하는 것과 같음 (스칼라배)
3) 선형 조합(linear combination)
•
벡터/행렬을 스칼라배한 후 더하거나 뺀 것으로, 벡터나 행렬을 선형조합해도 그 크기는 변하지 않음
4) 벡터와 벡터의 곱셈
•
내적(inner product, dot product)
•
혹은
•
앞을 행벡터, 뒤를 열벡터로 두고 같은 위치의 원소들을 각각 곱해 모두 더해 스칼라 값으로 만듦
•
가중합(weighted sum)을 벡터와 벡터의 곱셈으로 계산할 수 있음
•
벡터의 내적은 두 벡터간의 유사도(similarity)를 계산하는 데에도 이용 (유사할수록 내적이 커짐)
5) 행렬과 행렬의 곱셈
•
행렬 와 의 곱을 행렬 라고 할 때, 의 값은 A행렬의 i번째 행벡터 와 행렬의 번째 열벡터 의 내적
•
numpy를 활용한 행렬의 내적 계산
A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([[1, 2], [3, 4], [5, 6]])
Python
복사
A
Python
복사
array([[1, 2, 3],
[4, 5, 6]])
B
Python
복사
array([[1, 2],
[3, 4],
[5, 6]])
C = np.dot(A, B)
C
Python
복사
array([[22, 28],
[49, 64]])
6) 행렬의 계산 법칙
•
행렬의 곱셈은 교환법칙이 성립하지 않음
•
행렬의 덧셈에 대한 분배 법칙은 성립함
•
전치 연산도 덧셈/뺄셈에 대해 분배 법칙이 성립
•
전체 연산의 곱셈의 경우 분배법칙이 성립하지만 전치 연산이 분배되면서 곱셈의 순서가 바뀜
•
연속된 행렬의 곱셈은 계산 순서를 임의로 해도 상관 없음
•
어떤 정방 행렬이든 단위 행렬을 곱하면 그 행렬의 값이 변하지 않음