목차 Colab 노트북 다운로드 Colab 실행 ↗
1 선언
특수행렬
1행렬, 0행렬, 단위행렬(Idendtity Matrix)
# 3x2 형태의 1행렬 선언
# Input으로 tuple을 받는 것에 주의!
one_matrix = np.ones((3,2))
print(one_matrix)[[1. 1.]
[1. 1.]
[1. 1.]]
# 3x2 형태의 0행렬 선언
zero_matrix = np.zeros((3,2))
print(zero_matrix)[[0. 0.]
[0. 0.]
[0. 0.]]
# 3x3 형태의 단위행렬 선언
eye_matrix = np.eye(3)
print(eye_matrix)[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
# 리스트를 이용한 행렬 선언
data_int = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(data_int)[[1 2 3]
[4 5 6]
[7 8 9]]
# Matrix 형태 출력
print(data_int.shape)(3, 3)
# 원소의 데이터형 출력
print(data_int.dtype)int64
# 데이터형 변경
data_float = data_int.astype(np.float64)
print(data_float)
print(data_float.dtype)[[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
float64
2 행렬 연산
사칙연산 - 요소별(Element-wise) 연산
# 요소별 곱셈
print(data_int * data_int)[[ 1 4 9]
[16 25 36]
[49 64 81]]
# 상수 덧셈
print(data_int + 3)[[ 4 5 6]
[ 7 8 9]
[10 11 12]]
# 상수 나눗셈
print(data_int / 3)[[0.33333333 0.66666667 1. ]
[1.33333333 1.66666667 2. ]
[2.33333333 2.66666667 3. ]]
x = np.array([[1,2,3],[4,5,6]])
y = np.array([[1,0,-1],[1,1,0]])
print(x)
print(y)
print(y.T)[[1 2 3]
[4 5 6]]
[[ 1 0 -1]
[ 1 1 0]]
[[ 1 1]
[ 0 1]
[-1 0]]
print(np.dot(x,y.T))[[-2 3]
[-2 9]]
# 연속 정수로 array 생성
data_range = np.arange(10)
print(data_range)[0 1 2 3 4 5 6 7 8 9]
# index를 이용한 선택
print(data_range[0]) 0
# slicing
print(data_range[1:4])[1 2 3]
# slicing을 이용한 수정
data_range[1:4] = 10
print(data_range)[ 0 10 10 10 4 5 6 7 8 9]
# slicing을 하면 주소(pointer)가 반환됨에 주의!
tmp = data_range[1:4]
tmp[1] = 20
print(data_range)[ 0 10 20 10 4 5 6 7 8 9]
# 2차원 이상의 경우도 유사하다
print(data_int[2])
print(data_int[:2])
print(data_int[2][0])
print(data_int[2,0])
print(data_int[:2,1:])
data_int[:2,1:] = 0
print(data_int)[7 8 9]
[[1 2 3]
[4 5 6]]
7
7
[[2 3]
[5 6]]
[[1 0 0]
[4 0 0]
[7 8 9]]
import numpy.linalg as lin
mat = np.array([[2,2,0],[-2,1,1],[3,0,1]])
print(lin.inv(mat))[[ 0.08333333 -0.16666667 0.16666667]
[ 0.41666667 0.16666667 -0.16666667]
[-0.25 0.5 0.5 ]]
행렬 방정식 계산 A x = B Ax=B [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] [ x 1 x 2 x 3 ] = [ b 1 b 2 b 3 ] \begin{bmatrix}a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{bmatrix} \begin{bmatrix}x_1 \\ x_2 \\ x_3 \end{bmatrix} = \begin{bmatrix}b_1 \\ b_2 \\ b_3 \end{bmatrix}
matA = np.array([[3,2,1],[1,-1,3],[5,4,-2]])
matB = np.array([7,3,1])
print(lin.solve(matA, matB))[-3. 6. 4.]
4 실습 (Assignment 3)
행렬 방정식 풀기
다음 행렬 방정식을 ’Pseudo inverse matrix’를 이용해 풀어보자
A T A A^{T}A 의 역행렬이 존재한다고 가정 A x = B Ax=B A = [ 0 1 1 1 2 1 3 1 ] A = \begin{bmatrix}0 & 1 \\ 1 & 1 \\ 2 & 1 \\ 3 & 1 \end{bmatrix} B = [ − 1 0.2 0.9 2.1 ] B = \begin{bmatrix}-1 \\ 0.2 \\ 0.9 \\ 2.1 \end{bmatrix}