10. 곱셈
스칼라곱 (Scalar product)
αv = (αv , ⋯ , αv )
alpha * v 또는 np.multiply(alpha,v)
성분곱 Elementwise multiplication (Hadamard product)
v ⊙ u = (v u , ⋯ , v u )
v * u 또는 np.multiply(v,u)
1 d
1 1 d d
20. 행렬곱 (Matrix multiplication)
X : (n × m ) 행렬, Y : (m × m) 행렬
XY = x y = (x ⋅y )
X = np.random.normal(0,1,(n,p)) # (n,p)행렬 생성
Y = np.random.normal(0,1,(p,m)) # (p,m)행렬 생성
np.matmul(X,Y) # (n,m)행렬
np.matmul(Y,X) # 에러
′ ′
(
k=1
∑
m′
ik kj)
(n×m)
i j
T
21. Transpose
행렬의각 성분들의행과 열을바꾸는걸 전치(Transpose)라합니다.
X = (x ) → X = (x )
벡터도전치가 가능합니다
v = (v ) → v = (v )
X = np.array([[x11,..,x1m],..,[xn1,..,xnm]]) # (n,m) 행렬
X_transpose = np.transpose(X) # (m,n) 행렬
X.T
ij (n×m)
T
ji (m×n)
i (d×1)
T
i 1×d
22. 몇가지알아둬야할것들
1. v, u 가 벡터인경우
v u =u v
2. X, Y 가 행렬인경우
(X ) = X
(XY) =Y X
(X + Y) =X +Y
T T
T T
T T T
T T T
23. NumPy 에서행렬연산시주의할점
u = np.array([[1,2,3],[4,5,6]]) # (2,3) 행렬
v = np.array([[1,0,0],[0,1,0]])
u*v # 성분곱 (2,3) 행렬
np.matmul(u.T, v) # 행렬곱 (3,3) 행렬
np.matmul(u, v.T) # 행렬곱 (2,2) 행렬
u = np.matrix([[1,2,3],[4,5,6]])
v = np.matrix([[1,0,0],[4,5,6]])
np.multiply(u,v) # 성분곱 (2,3) 행렬
u.T * v # 행렬곱 (3,3) 행렬
u * v.T # 행렬곱 (2,2) 행렬
u*v # 에러
33. Norm
∥X∥ (1 ≤ p ≤ ∞)
Norm 은벡터, 행렬의크기 (≠ 부피)를나타내는양입니다
수치해석학에선Norm 의크기를통해오차를제어할수있습니다
p
34. ∥X∥ = ∣x ∣
linalg.norm(X,1)
∥X∥ =
linalg.norm(X,2)
linalg.norm(X, 'fro')
∥X∥ = ∣x ∣
linalg.norm(X, np.inf)
1
1≤j≤m
max
i=1
∑
n
ij
H
⎷
x
i=1
∑
n
j=1
∑
m
ij
2
∞
1≤i≤n
max
j=1
∑
m
ij