Math & Linear Algebra/Concepts

Matrix (fundamentals)

metamong 2022. 7. 31.

 

๐ŸŒป ์‚ฌ์‹ค ์ด๊ฑฐ ๋‹ค๋ฃฐ๋ ค๊ณ  Scalar & Vector ๋ฐฐ์šด ๊ฑฐ๋ผ ํ•  ์ •๋„๋กœ ํ–‰๋ ฌ์€.. ์„ ํ˜•๋Œ€์ˆ˜ํ•™์˜ ๊ฝƒ! ๐ŸŒป

 

Scalar & Vector (fundamentals)

โ–ถ Linear Algebra ํ•˜๋ฉด? ๋‹น์—ฐํžˆ ์•Œ์•„์•ผ ํ•  ๊ธฐ๋ณธ์€ 'Scalar(์Šค์นผ๋ผ)' & 'Vector(๋ฒกํ„ฐ)' & 'Matrix(ํ–‰๋ ฌ)' โ—€ 1. Scalar * concepts = "๋‹จ์ˆœํžˆ ๋ณ€์ˆ˜๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ˆซ์ž" → vector ํ˜น์€ matrices์— ๊ณฑํ•ด์ง€๋Š”..

sh-avid-learner.tistory.com

1. intro

"ํ–‰๋ ฌ์ด๋ž€  ํ–‰๊ณผ ์—ด์„ ํ†ตํ•ด ๋ฐฐ์น˜๋˜์–ด ์žˆ๋Š” ์ˆซ์ž๋“ค"

 

 matrix๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ณ€์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ฌธ์ž

 ํ–‰๋ ฌ์€ vector์˜ ๋ชจ์Œ์œผ๋กœ๋„ ๋งํ•  ์ˆ˜ ์žˆ์Œ (์ฃผ๋กœ default๋กœ column vector๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•จ)

→ ์ฆ‰, dataframe์— ์ ์šฉํ•˜๋ฉด ํ•œ column์„ vector, ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ column๋“ค์„ ๋ชจ์€ ์ผ์ข…์˜ dataframe์„ ํ–‰๋ ฌ์ด๋ผ ๋งํ•  ์ˆ˜๋„ ์žˆ์Œ

→ $X_{ij}$๋Š” ํ–‰๋ ฌ X์˜ i๋ฒˆ์งธ ์—ด๊ณผ j๋ฒˆ์งธ ํ–‰์ด ๋งŒ๋‚˜๋Š” ๊ณณ์˜ ์›์†Œ๋ฅผ ๋œปํ•œ๋‹ค

 

numpy๋ฅผ ์‚ฌ์šฉํ•ด 2์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์•„๋ž˜ matrix A๋Š” 2๊ฐœ์˜ ํ–‰ vector๋ฅผ ํ•˜๋‚˜์˜ array์•ˆ์— ๋‹ด์•„ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„ํ–ˆ๋‹ค.

(ํŒŒ์ด์ฌ numpy์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ–‰ vector๋ฅผ [] ์•ˆ์— ๋„ฃ์–ด๋‘๊ณ  ๋‚˜์—ดํ•ด์„œ ํ–‰๋ ฌ๋กœ ๋งŒ๋“ฆ)

import numpy as np

A = np.array([[1, 2],
              [3, 4]])

A
'''
array([[1, 2],
       [3, 4]])
'''

A.shape #(2,2)

#1st column vector
A[:, 0] 
#array([1, 3])

#2nd column vector
A[:, 1]
#array([2, 4])

#1st row vector
A[0, :]
#array([1, 2])

#2nd row vector
A[1, :]
#array([3, 4])

* ํ–‰๋ ฌ์˜ ์ผ์น˜ / ์ „์น˜

โ‘  ํ–‰๋ ฌ์˜ ์ผ์น˜

matrix dimensionality) matrix์˜ ํ–‰๊ณผ ์—ด์˜ ์ˆซ์ž(์ฐจ์›) (vector dimensionality๋Š” vector element์˜ ๊ฐœ์ˆ˜)

→ matrix dimensonality๋Š” (ํ–‰-์—ด)๋กœ ํ‘œํ˜„

 

→ ํ–‰๋ ฌ์˜ ์ผ์น˜ 2๊ฐ€์ง€ ์กฐ๊ฑด

(1) ์กฐ๊ฑด1) ๋‘ matrix๊ฐ€ ์ฐจ์›์ด ์„œ๋กœ ๋™์ผ (ex (2,3) != (3,2))

(2) ์กฐ๊ฑด2) ๊ฐ matrix ๊ตฌ์„ฑ component๊ฐ€ ๋™์ผ

 

โ‘ก ํ–‰๋ ฌ์˜ ์ „์น˜ (transpose)

= "matrix์˜ ํ–‰๊ณผ ์—ด์„ ๋ฐ”๊พธ๋Š”๊ฒƒ"

→ ์ผ๋ฐ˜์ ์œผ๋กœ matrix ์šฐ์ธก ์ƒ๋‹จ์— T ๋˜๋Š” tick ๋งˆํฌ๋ฅผ ํ‘œ๊ธฐํ•œ๋‹ค ($X^T = (x_{ji})$)

→ ์ฝ๋Š” ๋ฐฉ๋ฒ•์€ B transpose or B prime

 

→ ์ผ๋ฐ˜์ ์œผ๋กœ n์ฐจ์›์˜ vector๋Š” ์ฃผ๋กœ ์—ด๋ฒกํ„ฐ(column vector)๋ฅผ ์ง€์นญํ•  ๋•Œ ๋งŽ์ด ์“ฐ์ด๊ณ , ํ–‰๋ฒกํ„ฐ(row vector)๋Š” ์—ด๋ฒกํ„ฐ์˜ transpose ํ˜•ํƒœ๋กœ ๋งŽ์ด ์“ฐ์ธ๋‹ค. (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ์กฐ)

* ์—ฐ์‚ฐ

โ‘  ํ–‰๋ ฌ๊ณผ ์Šค์นผ๋ผ์˜ ์—ฐ์‚ฐ (broadcasting)

→ ๊ธฐ์กด ํ–‰๋ ฌ์„ A๋ผ๊ณ  ํ•˜๋ฉด A+1์€ A์˜ ๋ชจ๋“  ์š”์†Œ์— 1์ด ๋”ํ•ด์ง„ ๊ฒฐ๊ณผ์˜ ํ–‰๋ ฌ์ด ๋‚˜์˜จ๋‹ค.

 

→ A*3์€ A์˜ ๋ชจ๋“  ์š”์†Œ์— 3์ด ๊ณฑํ•ด์ง„ ๊ฒฐ๊ณผ์˜ ํ–‰๋ ฌ์ด ๋‚˜์˜จ๋‹ค.

 

A+1
'''
array([[2, 3],
       [4, 5]])
'''

A*3
'''
array([[ 3,  6],
       [ 9, 12]])
'''

โ‘ก ํ–‰๋ ฌ๊ณผ ํ–‰๋ ฌ์˜ ๊ณฑ - matrix multiplication

 

→ ์œ„ ๊ทธ๋ฆผ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, A์˜ ์—ด์˜ ๊ฐœ์ˆ˜(column vector์˜ ๊ฐœ์ˆ˜)์™€ B์˜ ํ–‰์˜ ๊ฐœ์ˆ˜(row vector์˜ ๊ฐœ์ˆ˜)๊ฐ€ ๊ฐ™์•„์•ผ๋งŒ multiplication ์ง„ํ–‰ ๊ฐ€๋Šฅ

 

not commutative - ๊ตํ™˜๋ฒ•์น™์ด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค AB≠BA

distributive -  ๋ถ„๋ฐฐ๋ฒ•์น™ ์„ฑ๋ฆฝ A(B+C) = AB + AC (Distributive)

associative - ๊ฒฐํ•ฉ๋ฒ•์น™ ์„ฑ๋ฆฝ A(BC) = (AB)C (Associative)

 

→ multiplication ๊ฒฐ๊ณผ ํ•œ ์Šค์นผ๋ผ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค๋ฉด ๋‚ด์ , ๋” ์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์ง„ matrix๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ์™ธ์ 

B = np.array([[1,2,3],
             [4,5,6]])

np.dot(A, B) # A X B

'''
array([[ 9, 12, 15],
       [19, 26, 33]])
'''

np.dot(B,A) #ValueError: shapes (2,3) and (2,2) not aligned: 3 (dim 1) != 2 (dim 0)

โ‘ข ํ–‰๋ ฌ๊ณผ ํ–‰๋ ฌ์˜ ํ•ฉ (element-wise)

→ ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ–‰๋ ฌ๋ผ๋ฆฌ ๊ฐ™์€ shape์„ ๊ฐ€์ง€๋ฉด, ํ–‰๋ ฌ ๊ฐ„์˜ ๋ง์…ˆ๊ณผ ๋บ„์…ˆ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ

C = np.array([[2, 2],
              [4, 4]])
A+C
'''
array([[3, 4],
       [7, 8]])
'''

A+B #ValueError: operands could not be broadcast together with shapes (2,2) (2,3)

โ‘ฃ ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ์˜ ๊ณฑ

 

→ ํ–‰๋ ฌ๊ณผ ํ–‰๋ ฌ์˜ ๊ณฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ element-wise ์ง„ํ–‰

# v - column vector
v = np.array([[1],
              [2]])

np.dot(A,v)
'''
array([[ 5],
       [11]])
'''

A
'''
array([[1, 2],
       [3, 4]])
'''

 

โ€ป ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ ๊ณฑ์˜ ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ โ€ป

 

๐Ÿ† column vector๋Š” ๊ณต๊ฐ„์ƒ์˜ ํ•œ ์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์—ฌ๋Ÿฌ column vector๊ฐ€ ๋ชจ์ธ matrix์— ์˜ํ•ด column vector ํ•œ ์ ์ด ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด column vector๋กœ ๋ณ€ํ™˜

 

๐Ÿ† ์ฆ‰, ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ ๊ณฑ์—์„œ์˜ matrix๋Š” ๊ณต๊ฐ„์ƒ์˜ ํ•œ ์ ์„ ๋‹ค๋ฅธ ์ ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ 'linear transformation(์„ ํ˜•๋ณ€ํ™˜)'์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๐Ÿ† Linear Transformation ๋‘ ๊ฐ€์ง€ ์„ฑ์งˆ

→ T(u+v) = T(u) + T(v)

→ T(av) = aT(v) (a๋Š” scalar)

 

ex1) ์•„๋ž˜ ํ–‰๋ ฌ A์— ์˜ํ•ด column vector [1, 2]๊ฐ€ [5, 11]์ด๋ผ๋Š” ๋‹ค๋ฅธ ์ ์œผ๋กœ ์ด๋™ํ–ˆ๋‹ค.

 

ex2) m์ฐจ์›์˜ column vector๋ฅผ linear transformation์„ ํ™œ์šฉํ•ด ์ฐจ์›์ด ๋‹ค๋ฅธ n์ฐจ์›์˜ ๊ณต๊ฐ„์œผ๋กœ ์ด๋™์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค. 

 

v=np.array([[1],
  [1],
  [1]])

A=np.array([[1,0,1],
  [0,1,0],
  [0,1,1],
  [1,1,0]])

print(np.dot(A,v))
'''
[[2]
 [1]
 [2]
 [2]]
'''

 

→ ์œ„ ์ฝ”๋“œ ์˜ˆ์‹œ์—์„œ column vector์˜ ์ฐจ์›์€ 3์ด์—ˆ์œผ๋‚˜, A์— ์˜ํ•ด linear transformation ๊ณผ์ •์œผ๋กœ ๊ฑฐ์ณ 4์ฐจ์› ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ–ˆ๋‹ค.

์ฆ‰, matrix multiplication์„ ํ†ตํ•ด m์ฐจ์› ๊ณต๊ฐ„์— ์กด์žฌํ•˜๋Š” ๊ธฐ์กด vector๋ฅผ ๋‹ค๋ฅธ ์ฐจ์›์ธ n์ฐจ์› ๊ณต๊ฐ„์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค(mapping)

๋”ฐ๋ผ์„œ, matrix multipllication์„ ํ†ตํ•ด ํŒจํ„ด์„ ์ถ”์ถœํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (๊ธฐ๊ณ„ํ•™์Šต์—์„œ ํ–‰๋ ฌ์„ ๋งŽ์ด ์‚ฌ์šฉ)


โ‘ค ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ์˜ ํ•ฉ (broadcasting)

A+v
'''
array([[2, 3],
       [5, 6]])
'''

(โ€ป ๊ทธ๋ฆผ ์ฐธ์กฐ โ€ป)


2. ํ–‰๋ ฌ์˜ ์ข…๋ฅ˜

* ๋Œ€๊ฐํ–‰๋ ฌ(diagonal matrix)

๐Ÿ† ์ •์˜ →  '๋Œ€๊ฐ์„  ์œ„์— ์žˆ๋Š” ์›์†Œ ์ด์™ธ์˜ ๋‹ค๋ฅธ ์›์†Œ์˜ ๊ฐ’์ด ๋ชจ๋‘ 0์ธ ํ–‰๋ ฌ'

(์ฃผ๋กœ ์ •์‚ฌ๊ฐํ–‰๋ ฌ์—์„œ ์ง€์นญํ•˜๋‚˜, ์ •์‚ฌ๊ฐํ–‰๋ ฌ์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋„ ์กด์žฌ - ์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ์กฐ)

 

๐Ÿ† ๋Œ€๊ฐํ–‰๋ ฌ์˜ ์„ฑ์งˆ๋กœ, ๋™์ผ ๋Œ€๊ฐํ–‰๋ ฌ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ณฑํ•˜๋ฉด, ๋Œ€๊ฐ์„ฑ๋ถ„์˜ ๊ฐ’์„ ๋™์ผํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ณฑํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋Œ€๊ฐ์„  ์„ฑ๋ถ„์œผ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค.

๐Ÿ† ๋Œ€๊ฐํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ์˜ ๊ณฑ - ๋Œ€๊ฐํ–‰๋ ฌ์˜ ๋Œ€๊ฐ์„ฑ๋ถ„์ด ์ผ์ข…์˜ scalar ํ˜•ํƒœ๋กœ vector์˜ element์— ๊ณฑํ•ด์ง€๋Š” ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚จ

D = np.array([[1,0],
             [0,4]])
np.dot(D,D)
'''
array([[ 1,  0],
       [ 0, 16]])
'''

* ์ƒ์‚ผ๊ฐํ–‰๋ ฌ(upper triangular matrix)

๐Ÿ† ์ •์˜ → '๋Œ€๊ฐ์„  ์œ„์ชฝ ๋ถ€๋ถ„(+๋Œ€๊ฐ์„  ์„ฑ๋ถ„ ํฌํ•จ)์—๋งŒ ๊ฐ’์ด ์žˆ๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ „๋ถ€ 0์ธ ํ–‰๋ ฌ'

* ํ•˜์‚ผ๊ฐํ–‰๋ ฌ(lower triangular matrix)

๐Ÿ† ์ •์˜ → '๋Œ€๊ฐ์„  ์•„๋ž˜์ชฝ ๋ถ€๋ถ„(+๋Œ€๊ฐ์„  ์„ฑ๋ถ„ ํฌํ•จ)์—๋งŒ ๊ฐ’์ด ์žˆ๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ „๋ถ€ 0์ธ ํ–‰๋ ฌ'

 

* ๋‹จ์œ„ํ–‰๋ ฌ(unit matrix; identity matrix)

๐Ÿ† ์ •์˜ →  '๋Œ€๊ฐ์„ฑ๋ถ„์ด ๋ชจ๋‘ 1์ธ ๋Œ€๊ฐํ–‰๋ ฌ' (์œ„ ๋Œ€๊ฐํ–‰๋ ฌ์˜ ๋Œ€๊ฐ์„ฑ๋ถ„์ด ๋ชจ๋‘ 1์ด๋ฉด ๋œ๋‹ค)

 

๐Ÿ† ๋‹จ์œ„ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ์˜ ๊ณฑ - ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ๊ธฐ์กด vector๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋ฏ€๋กœ, ๋‹จ์œ„ํ–‰๋ ฌ์— ์˜ํ•ด ํ–‰ํ•ด์ง€๋Š” ๋ณ€ํ™˜์€ ๋ฒกํ„ฐ๋ฅผ ์›€์ง์ด์ง€ ์•Š๋Š” ๋ณ€ํ™˜์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

I = np.eye(2)

I
'''
array([[1., 0.],
       [0., 1.]])
'''

np.dot(I, A)
'''
array([[1., 2.],
       [3., 4.]])
'''

* ์ „์น˜ํ–‰๋ ฌ(transposed matrix)

๐Ÿ† ์ •์˜ →  'ํ–‰๊ณผ ์—ด์ด ๋ฐ”๋€ ํ–‰๋ ฌ'

 

๐Ÿ† ๊ธฐ์กด ํ–‰๋ ฌ์˜ ํ–‰์ด ์ƒˆ๋กœ์šด ํ–‰๋ ฌ์˜ ์—ด์ด ๋˜๊ณ , ์—ด์ด ํ–‰์ด ๋˜๋Š” ๊ฒƒ์œผ๋กœ Aํ–‰๋ ฌ์˜ ์ „์น˜ํ–‰๋ ฌ์€ $A^T$๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค

 

๐Ÿ† ์ „์น˜ํ–‰๋ ฌ ๊ด€๋ จ ์„ฑ์งˆ

โ‘  $(A^T)^T = A$

โ‘ก $(A+B)^T = A^T + B^T$

โ‘ข $(kA)^T = kA^T$

โ‘ฃ $(AB)^T = B^TA^T$

ex) $(A+BC)^T = A^T + (BC)^T = A^T + A^T + C^TB^T$

A
'''
array([[1, 2],
       [3, 4]])
'''

A.T
'''
array([[1, 3],
       [2, 4]])
'''

* ๋Œ€์นญํ–‰๋ ฌ(symmetric matrix)

๐Ÿ† ์ •์˜ →  '๋Œ€๊ฐ์„ ์„ ๊ธฐ์ค€์œผ๋กœ ์œ„์™€ ์•„๋ž˜๊ฐ€ ๊ฐ™์€ ํ–‰๋ ฌ'

๐Ÿ† ๋Œ€์นญํ–‰๋ ฌ ๊ด€๋ จ ์„ฑ์งˆ

$$A = A^T$$

* ์—ญํ–‰๋ ฌ(inverse matrix)

๐Ÿ† $A$์˜ ์—ญํ–‰๋ ฌ์€ $A^{-1}$๋กœ ํ‘œํ˜„

 

๐Ÿ† $AA^{-1} = A^{-1}A = I_n$

 

ex) 2x2 ํ–‰๋ ฌ์˜ ์—ญํ–‰๋ ฌ ๊ตฌํ•˜๊ธฐ

โ€ป ์—ญํ–‰๋ ฌ์˜ ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ โ€ป

 

๐Ÿ† A์˜ ์—ญํ–‰๋ ฌ์€ 'A์— ์˜ํ•ด์„œ(linear transformation) ์˜ฎ๊ฒจ์ง„ ์ ์„ ๋‹ค์‹œ ์›๋ž˜์˜ ์ ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ์ผ์ข…์˜ ๋ณ€ํ™˜'์„ ๋œปํ•œ๋‹ค.

๐Ÿ† ์—ฐ๋ฆฝ๋ฐฉ์ •์‹์—์„œ๋Š” ์—ญํ–‰๋ ฌ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฑด, ์œ ์ผํ•œ ํ•ด๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๋œป (์—ญํ–‰๋ ฌ์ด ์›๋ž˜์˜ ์ ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๋ณ€ํ™˜์ด๋ฏ€๋กœ, ๊ทธ ๋ณ€ํ™˜์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฑด ๋„์ฐฉ์ ์ธ ํ•ด๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•˜๋ฏ€๋กœ)

๐Ÿ† ํ–‰๋ ฌ A์˜ ์—ญํ–‰๋ ฌ์€ np.linalg.inv()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

A = np.array([[1, 2],
              [2, 5]])

A_inv = np.linalg.inv(A)

A_inv
'''
array([[ 5., -2.],
       [-2.,  1.]])
'''

np.dot(A, A_inv)
'''
array([[1., 0.],
       [0., 1.]])
'''

np.linalg.det(A) #1

 

๐Ÿ† A์™€ ๋ณ€ํ™˜ ํ›„์˜ vector y๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์—ญํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•ด ๋ณ€ํ™˜ ์ „ vector๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

y = np.array([1,2])

np.dot(A_inv,y) #array([1., 0.])

* ์ถ”๊ฐ€

๐Ÿ† matrix๋ฅผ python์—์„œ ํ‘œํ˜„ํ•˜๋ ค๋ฉด 2D numpy array๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, 1D numpy array๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, reshape method๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹ค์ œ matrix๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ‘  1D numpy array๋ฅผ row vector๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด array_1D.reshape(1, -1)

โ˜† โ‘ก 1D numpy array๋ฅผ column vector๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด array_1D.reshape(-1,1)

 

x = np.arange(10)

x.reshape(1,-1)
#array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

x.reshape(-1,1)
'''
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])
'''

* ์ถœ์ฒ˜1) matrix multiplication> https://en.wikipedia.org/wiki/Matrix_multiplication

* ์ถœ์ฒ˜2) 1d - 2d np array ๋ณ€ํ™˜ https://roundhere.tistory.com/entry/Python-Numpy-%EB%8B%A8%ED%8E%B8-1D-array%EB%A5%BC-2D-array%EC%9D%98-vector%EB%A1%9C-%EB%B3%80%ED%99%98

* ์ถœ์ฒ˜3) ๋„ค์ด๋ฒ„ AI-Tech pre-course ๊ฐ•์ขŒ

* ์ถœ์ฒ˜4) edtih boostcourse <์ธ๊ณต์ง€๋Šฅ์„ ์œ„ํ•œ ์„ ํ˜•๋Œ€์ˆ˜> ๊ฐ•์ขŒ

* ์ถœ์ฒ˜5) gilbert strang's MIT + khan academy ์„ ํ˜•๋Œ€์ˆ˜ํ•™

* ์ถœ์ฒ˜6) ๋Œ€ํ•™์› DA ์‚ฌ์ „๊ต์œก <๋ฐ์ดํ„ฐ๋ถ„์„์„ ์œ„ํ•œ ๊ธฐ์ดˆ์ˆ˜ํ•™>

'Math & Linear Algebra > Concepts' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

vector similarity  (0) 2023.02.09
Linear Equation & Linear System / Rank & det(A)  (0) 2023.02.01
Odds Ratio & log(Odds Ratio)  (0) 2022.07.11
eigenvalue & eigenvector  (0) 2022.05.14
linear & non-linear โ†’ span, basis, rank, projection  (0) 2022.05.13

๋Œ“๊ธ€