728x90
numpy로 간단하게...array 선언해서 행렬연산하던 내게..
파이썬으로 하나하나 구현해보게 하는... 참 가르침을...주시는 단원...💡
#2. 행렬
(이라 쓰고 행렬 연산에 대한 걸 파이썬으로 구현해보기라고 읽는다)
2.1 스칼라
- 크기 만으로 나타낼 수 있는 물리량. 쉽게 말해 ‘숫자 하나’ 로 표현되는 것
2.2 벡터
- 크기와 방향을 모두 나타내는 개념으로, 스칼라의 집합이며 행렬을 구성하는 기본 단위
- 크기와 방향이 같다면 그래프 상 위치와 상관 없이 동일한 벡터로 간주
파이썬 버전으로
#벡터 덧셈 함수로 만들기
def v_add(u,v):
n=len(u)
w=[]
for i in range(0,n):
val = u[i]+v[i]
w.append(val)
return w
v_add(u,v)
#벡터 * 스칼라 곱 함수로 만들기
def scalar_v_mul(u,a):
n = len(u)
w = []
for i in range (0,n):
val = u[i] * a
w.append(val)
return w
test_u = [3,4,5]
test_a = 2
scalar_v_mul(test_u,test_a)
# 벡터 간 원소곱
u = [1,2,4]
v = [7,3,2]
def v_mul(u,v):
n=len(u)
w = []
for i in range (0,n):
val = u[i] * v[i]
w.append(val)
return w
v_mul(u,v)
넘파이 구현
import numpy as np
u = np.array([1,2,3])
v = np.array([4,5,6])
#덧셈
w = u+v
print(w)
#스칼라곱
a = 3
mul_u = a * u
print(mul_u)
#벡터곱
mul_uv = u*v
print(mul_uv)
2.3 행렬
- 행과 열로 구성
- 행렬 원소 : 하나의 스칼라 행과 열 번호에 따라 기재 가능
2.3.1 행렬 곱
- 행렬끼리 곱하는 것으로 곱하는 행렬의 열과 곱해지는 행렬의 행의 크기가 일치해야 가능
- 행렬 곱의 결과 요소인 행렬 원소는 아래와 같음
파이썬 버전 구현
#행렬 곱
A = [[2,7], [3,4], [5,2]]
B = [[3,-3,5], [-1,2,-1]]
n = len(A) #A의 행
p1 = len(A[0]) #A의 렬
p2 = len(B[0]) #B의 렬 (행은 A의 렬과 동일)
res=[]
for i in range(0,n):
row=[]
for j in range(0,p2):
val = 0
for k in range(0,p1):
val += A[i][k] * B[k][j] #i=n, k=p1, j=p2
row.append(val)
res.append(row)
#위의 구현을 함수로 만들기
def matmul (A,B):
n = len(A)
p1 = len(A[0])
p2 = len(B[0])
res = []
for i in range(0,n):
row = []
for j in range (0,p2):
val = 0
for k in range (0,p1):
val += A[i][k] * B[k][j]
row.append(val)
res.append(row)
return res
matmul (A,B)
넘파이 버전 구현
import numpy as np
A = np.array([[1,2],[3,4],[5,6]]) #np.array로 행렬 선언해줘야 사용 가능
B = np.array([[2,3,4],[2,4,5]])
#행렬곱
D = np.matmul(A,B)
print(C,D)
'👩💻LEARN : ML&Data > Book Study' 카테고리의 다른 글
[알고리즘 구현으로 배우는 선형대수] #4. 선형 시스템 (0) | 2023.04.08 |
---|---|
[알고리즘 구현으로 배우는 선형대수] #3. 다양한 행렬 (0) | 2023.04.07 |
[알고리즘 구현으로 배우는 선형대수] #1. 선형대수를 위한 기초 파이썬 (0) | 2023.03.17 |
[다시 미분 적분] #총정리 (0) | 2023.03.09 |
[모두의 딥러닝] #5-21. 설명가능한 딥러닝 (CAM, 오클루전) (0) | 2023.02.27 |