brunch

You can make anything
by writing

C.S.Lewis

by 라인하트 Dec 26. 2020

머신러닝 옥타브 실습2: 행렬 계산

   온라인 강의 플랫폼 코세라의 창립자인 앤드류 응 (Andrew Ng) 교수는 인공지능 업계의 거장입니다. 그가 스탠퍼드 대학에서 머신 러닝 입문자에게 한 강의를 그대로 코세라 온라인 강의 (Coursera.org)에서 무료로 배울 수 있습니다. 이 강의는 머신러닝 입문자들의 필수코스입니다. 인공지능과 머신러닝을 혼자 공부하면서 자연스럽게 만나게 되는 강의입니다. 



Octave/Matlab 활용 - 행렬과 벡터


옥타브 프로그램에서 행렬과 벡터를 다음과 같이  계산할 수 있습니다. 

    

(1) 행렬 A를 정의 


% The ; denotes we are going back to a new row.

A = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12]


결과는 다음과 같습니다. 


A =

      1    2    3

      4    5    6

      7    8    9

     10   11   12




(2) 벡터 v를 정의 

% Initialize a vector 

v = [1;2;3] 


결과는 다음과 같습니다. 

v =

     1

     2

     3



(3) 행렬 A의 크기를 행과 열로 표시

% Get the dimension of the matrix A where m = rows and n = columns

[m, n] = size(A)


결과는 다음과 같습니다.  


m =  4

 n =  3



(4) 행렬 A의 크기를 행과 열로 표시 

% You could also store it this way

dim_A = size(A)


결과는 다음과 같습니다.  


dim_A =

         4   3



(5) 벡터 v의 크기를 행과 열로 표시

% Get the dimension of the vector v 

dim_v = size(v)


결과는 다음과 같습니다. 


dim_v =

         3    1



(6) 행렬 A의 2행 3열의 원소를 표시

% Now let's index into the 2nd row 3rd column of matrix A

A_23 = A(2,3)


결과는 다음과 같습니다. 


A_23 =  6




Octave/Matlab 활용 - 행렬 덧셈과 스칼라 곱 


옥타브 프로그램에서 행렬과 벡터를 다음과 같이 계산합니다.  

    

(1) 행렬 A와 B를 정의 

% Initialize matrix A and B 

A = [1, 2, 4; 5, 3, 2]

B = [1, 3, 4; 1, 1, 1]


결과는 다음과 같습니다.


A =

    1   2   4

    5   3   2


 B =

    1   3   4

    1   1   1



(2) 상수 2를 정의

% Initialize constant s 

s = 2


결과는 다음과 같습니다.


s =  2



(3) 두 행렬을 더하기

% See how element-wise addition works

add_AB = A + B 


결과는 다음과 같습니다.


add_AB =

    2   5   8

    6   4   3



(4) 두 행렬을 빼기

% See how element-wise subtraction works

sub_AB = A - B


결과는 다음과 같습니다.


sub_AB =

    0  -1   0

    4   2   1



(5) 행렬 A에 상수로 스칼라 곱하기 

% See how scalar multiplication works

mult_As = A * s


결과는 다음과 같습니다.


mult_As =

     2    4    8

   10    6    4



(6) 행렬 A에 상수로 스칼라 나누기

% Divide A by s

div_As = A / s


결과는 다음과 같습니다.


div_As =    0.50000   1.00000   2.00000

                   2.50000   1.50000   1.00000 



(7) 행렬 A에 상수를 더하기

% What happens if we have a Matrix + scalar?

add_As = A + s


결과는 다음과 같습니다.


add_As =

    3   4   6

    7   5   4


Octave/Matlab 황용 - 행렬 덧셈과 스칼라 곱 


옥타브 언어에서 행렬과 벡터를 다음과 같이 나타냅니다. 


(1) 행렬 A를 정의 

% Initialize matrix A 

A = [1, 2, 3; 4, 5, 6;7, 8, 9] 


결과는 다음과 같습니다.

A = 

         1   2   3   

         4   5   6

         7   8   9



(2) 벡터 v를 정의

% Initialize vector v 

v = [1; 1; 1] 


결과는 다음과 같습니다. 

v =

    1

    1

    1


(3) 행렬 A와 벡터 v를 곱하기

% Multiply A * v

Av = A * v


결과는 다음과 같습니다.


Av =

     6

    15

    24




Octave/Matlab 활용 - 행렬과 행렬의 곱셈  


옥타브 언어에서 행렬과 벡터를 다음과 같이 나타냅니다. 


(1) 행렬 A를 정의 

% Initialize a 3 by 2 matrix 

A = [1, 2; 3, 4;5, 6]


결과는 다음과 같습니다. 


A =

    1   2

    3   4

    5   6


(2) 행렬 B를 정의 

% Initialize a 2 by 1 matrix 

B = [1; 2] 


결과는 다음과 같습니다. 

B =

    1

    2


(2) 행렬 A와 행렬 B를 곱하기  

% We expect a resulting matrix of (3 by 2)*(2 by 1) = (3 by 1) 

mult_AB = A*B


결과는 다음과 같습니다. 


mult_AB =

     5

    11

    17


Octave/Matlab 활용 - 행렬의 속성   


옥타브 언어에서 행렬과 벡터를 다음과 같이 나타냅니다. 


(1) 행렬 A와 행렬 B를 정의 

% Initialize random matrices A and B 

A = [1,2;4,5]

B = [1,1;0,2]


결과는 다음과 같습니다.


A =

    1   2

    4   5


 B =

    1   1

    0   2



(2) 2 X 2  항등 행렬 I를 정의

% Initialize a 2 by 2 identity matrix

I = eye(2)


결과는 다음과 같습니다.


I = 

Diagonal Matrix

    1   0

    0   1


항등 행렬을 아래 같은 코드로 작성해도 동일한 값을 얻는다 

% The above notation is the same as

I = [1,0;0,1]



(3) 항등 행렬 I와 행렬 A를 순서대로 곱하기

% What happens when we multiply I*A? 

IA = I*A 


결과는 다음과 같습니다.


IA =

    1   2

    4   5


(4) 행렬 A와 항등 행렬 I를 순서대로 곱하기

% How about A*I? 

AI = A*I 


결과는 다음과 같습니다.


AI =

    1   2

    4   5




(5) 행렬 A와 행렬 B를 순서대로 곱하기

% Compute A*B 

AB = A*B 


결과는 다음과 같습니다.


AB =

     1    5

     4   14



(6) 행렬 B와 행렬 A를 순서대로 곱하기

% Is it equal to B*A? 

BA = B*A 


BA =

     5    7

     8   10


(5) 번과 (6) 번의 과정을 통해 행렬 곱셈의 교환 법칙은 성립하지 않는다. 

% Note that IA = AI but AB != BA



Octave/Matlab 활용 - 행렬과 행렬의 곱셈  


옥타브 언어에서 행렬과 벡터를 다음과 같이 나타냅니다. 


(1) 행렬 A를 정의 

% Initialize matrix A 

A = [1,2,0;0,5,6;7,0,9]


결과는 다음과 같습니다. 

A =

    1   2   0

    0   5   6

    7   0   9



(2) 행렬 A의 전치 행렬을 구하기

% Transpose A 

A_trans = A' 


결과는 다음과 같습니다.

A_trans =

    1   0   7

    2   5   0

    0   6   9



(3) 행렬 A의 역행렬 구하기

% Take the inverse of A 

A_inv = inv(A)


결과는 다음과 같습니다. 

A_inv =

    0.348837  -0.139535   0.093023

    0.325581   0.069767  -0.046512

   -0.271318   0.108527   0.038760 



(3) 행렬 A와 행렬 A의 역행렬 곱하기

% What is A^(-1)*A? 

A_invA = inv(A)*A


결과는 다음과 같습니다. 

A_invA =

    1.00000  -0.00000   0.00000

    0.00000   1.00000  -0.00000

   -0.00000   0.00000   1.00000



매거진의 이전글 앤드류 응의 머신 러닝 후기 그리고 통번역
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari