[6주차 - Day4] ML_basics - Linear Algebra, Matrix Calculus

2023. 5. 14. 17:30BOOTCAMP/프로그래머스 인공지능 데브코스

 

Python에서의 벡터, 행렬 표현방법

[10.5, 5.2, 3.25, 7.0]

[10.5, 5.2, 3.25, 7.0]

 

import numpy as np
x = np.array([10.5, 5.2, 3.25])
x.shape

(3,)

i = 2
x[i]

3.25

np.expand_dims(x, axis=1).shape

(3, 1)

A = np.array([
    [10,20,30],
    [40,50,60]
])
A

array([[10, 20, 30],
       [40, 50, 60]])

A.shape

(2, 3)

i = 0
j = 2
A[i, j]

30

j = 1
A[:, j]

array([20, 50])

i = 1
A[i, :]

array([40, 50, 60])

행렬의 곱셉 (Matrix Multiplication)

 

행렬의 곱셈을 이해하는 몇 가지 방식들

  • 벡터 ×× 벡터
  • 행렬 ×× 벡터
  • 행렬 ×× 행렬
import numpy as np
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
x.dot(y)

32

y.dot(x)

32

x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
x = np.expand_dims(x, axis=1)
y = np.expand_dims(y, axis=0)
x.shape, y.shape

((3, 1), (1, 3))

np.matmul(x,y)

array([[ 4,  5,  6],

       [ 8, 10, 12],

       [12, 15, 18]])

x = np.expand_dims(np.array([1, 2, 3]), axis=1)
ones = np.ones([1,4])
A = np.matmul(x, ones)
A

array([[1., 1., 1., 1.],

       [2., 2., 2., 2.],

       [3., 3., 3., 3.]])

고윳값 (Eigenvalues), 고유벡터 (Eigenvectors)

A = np.array([
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 0]
    ])
eigenvalues, eigenvectors = LA.eig(A)
eigenvalues, eigenvectors

(array([12.12289378, -0.38838384, -5.73450994]),

 array([[-0.29982463, -0.74706733, -0.27625411],

        [-0.70747178,  0.65820192, -0.38842554],

        [-0.63999131, -0.09306254,  0.87909571]]))

eigenvectors[:, 0]

array([-0.29982463, -0.70747178, -0.63999131])

np.matmul(A, eigenvectors[:, 0])

array([-3.63474211, -8.57660525, -7.75854663])

eigenvalues[0] * eigenvectors[:, 0]

array([-3.63474211, -8.57660525, -7.75854663])

A = np.array([
        [1, 2, 3],
        [4, 5, 9],
        [7, 8, 15]
    ])
eigenvalues, eigenvectors = LA.eig(A)
eigenvalues, eigenvectors

(array([ 2.12819293e+01, -2.81929326 e-01,  9.68995205 e-16]),

 array([[ 0.17485683,  0.85386809, -0.57735027],

        [ 0.50887555,  0.18337571, -0.57735027],

        [ 0.84289427, -0.48711666,  0.57735027]]))

LA.matrix_rank(A)

2