brunch

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

by 라인하트

온라인 강의 플랫폼 코세라의 창립자인 앤드류 응 (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



Screen Shot 2020-10-04 at 11.04.18 AM.png


(2) 벡터 v를 정의

% Initialize a vector

v = [1;2;3]


결과는 다음과 같습니다.

v =

1

2

3


Screen Shot 2020-10-04 at 11.01.50 AM.png


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

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

[m, n] = size(A)


결과는 다음과 같습니다.


m = 4

n = 3


Screen Shot 2020-10-04 at 11.05.10 AM.png


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

% You could also store it this way

dim_A = size(A)


결과는 다음과 같습니다.


dim_A =

4 3


Screen Shot 2020-10-04 at 11.05.48 AM.png


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

% Get the dimension of the vector v

dim_v = size(v)


결과는 다음과 같습니다.


dim_v =

3 1


Screen Shot 2020-10-04 at 11.06.37 AM.png


(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


Screen Shot 2020-10-04 at 11.07.59 AM.png



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


Screen Shot 2020-10-04 at 12.06.15 PM.png


(2) 상수 2를 정의

% Initialize constant s

s = 2


결과는 다음과 같습니다.


s = 2


Screen Shot 2020-10-04 at 12.10.34 PM.png


(3) 두 행렬을 더하기

% See how element-wise addition works

add_AB = A + B


결과는 다음과 같습니다.


add_AB =

2 5 8

6 4 3


Screen Shot 2020-10-04 at 12.07.35 PM.png


(4) 두 행렬을 빼기

% See how element-wise subtraction works

sub_AB = A - B


결과는 다음과 같습니다.


sub_AB =

0 -1 0

4 2 1


Screen Shot 2020-10-04 at 12.08.38 PM.png


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

% See how scalar multiplication works

mult_As = A * s


결과는 다음과 같습니다.


mult_As =

2 4 8

10 6 4


Screen Shot 2020-10-04 at 12.11.23 PM.png


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

% Divide A by s

div_As = A / s


결과는 다음과 같습니다.


div_As = 0.50000 1.00000 2.00000

2.50000 1.50000 1.00000


Screen Shot 2020-10-04 at 12.11.53 PM.png


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

% What happens if we have a Matrix + scalar?

add_As = A + s


결과는 다음과 같습니다.


add_As =

3 4 6

7 5 4

Screen Shot 2020-10-04 at 12.12.35 PM.png


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

Screen Shot 2020-10-05 at 2.41.59 PM.png



(2) 벡터 v를 정의

% Initialize vector v

v = [1; 1; 1]


결과는 다음과 같습니다.

v =

1

1

1


Screen Shot 2020-10-05 at 2.42.23 PM.png

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

% Multiply A * v

Av = A * v


결과는 다음과 같습니다.


Av =

6

15

24


Screen Shot 2020-10-05 at 2.43.21 PM.png



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


Screen Shot 2020-10-06 at 9.51.11 AM.png

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


Screen Shot 2020-10-06 at 2.22.47 PM.png


(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]


Screen Shot 2020-10-06 at 2.23.53 PM.png


(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


Screen Shot 2020-10-06 at 2.24.46 PM.png



(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


Screen Shot 2020-10-06 at 2.25.45 PM.png


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


Screen Shot 2020-10-09 at 8.40.11 AM.png


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

% Transpose A

A_trans = A'


결과는 다음과 같습니다.

A_trans =

1 0 7

2 5 0

0 6 9


Screen Shot 2020-10-09 at 8.40.20 AM.png


(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


Screen Shot 2020-10-09 at 8.41.08 AM.png


(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


Screen Shot 2020-10-09 at 8.42.18 AM.png


keyword
매거진의 이전글앤드류 응의 머신 러닝 후기 그리고 통번역