자급자족하는 블로그

[MATLAB] 배열을 이용한 연산(Mathematical Operations with Arrays) 본문

MATLAB

[MATLAB] 배열을 이용한 연산(Mathematical Operations with Arrays)

YPSR 2018. 7. 21. 01:43

이번 포스팅에서는 array를 이용하는 다양한 연산에 대해서 알아보도록 하겠습니다.



Array를 이용하는 연산에는 두 종류가 있는데요, matrix operation과 element-by-element operation입니다.

Matrix operation은 행렬 간 곱셈과 같이 피연산자가 matrix인 경우의 연산을 말합니다.

반면 element-by-element operation은 matrix 자체의 연산이 아니라 element 간의 연산을 말합니다.

당장은 이해가 잘 안될 수도 있습니다만, 아래 설명을 읽으시다보면 쉽게 이해하시리라 생각합니다.


설명의 편의를 위해, 본 포스팅에서 대문자 변수는 array를, 소문자 변수는 scalar를 뜻하는 것으로 약속합시다.




1. Matrix operation


1) 덧셈(addition)과 뺄셈(subtraction)


표현: A+B(addition), A-B(subtraction)

조건: 두 matrix의 size는 동일해야 함


Matrix가 아닌 scalar 값을 더하거나 뺄 경우, matrix의 모든 element에 연산이 적용됩니다.




Fig 1. Addition and subtraction with matrices


2) 곱셈(multiplication)


표현: A*B

조건: A의 row의 갯수와 B의 column의 갯수가 동일해야 함


본 포스팅에서 행렬간 곱셈에 대해서 구체적으로 소개하지는 않고, 수식으로 간단히 넘어가겠습니다.

아래와 같이 표현되기 때문에, A의 row의 갯수와 B의 column의 갯수가 동일해야 정상적인 연산이 이루어집니다.

Matrix가 아닌 scalar를 곱할 경우, 모든 element에 연산이 적용됩니다.




Fig 2. Multiplications with matrices


3) 나눗셈(division)


표현: A\B(left division), B/A(right division)

조건: A는 정사각행렬이어야 하며, 역행렬이 존재해야 함


MATLAB에서 array간 나눗셈은 left division과 right division 두 종류가 있습니다.

그 이유는 행렬 간 곱셈은 교환법칙이 성립되지 않기 때문인데요, AX=B의 관계식에서 X와 XA=B의 관계식에서 X는 서로 다를 수 있기 때문입니다. 때문에 연산도 달리 해야 합니다.

Left division의 경우 AX=B의 관계식에서 X를 구할 때 사용되며, 결과는 A^(-1)B입니다.

Right division의 경우에는 XA=B의 관계식에서 X를 구할 때 사용되며, 결과는 BA^(-1)입니다.

물론 division operation을 사용하지 않아도 inv 함수를 이용하면 원하는 결과를 얻을 수 있습니다.


Fig 3. Division with matrices



2. Element-by-element operation


다음으로 element-by-element operation에 관하여 알려드리겠습니다.

덧셈 및 뺄셈은 matrix operation과 동일하므로 생략하겠습니다.


 A.*B

 곱셈

 

 A.^c

 거듭제곱

 

 A.\B

 나눗셈(right division)

 

 A./B

 나눗셈(left division)

 

Table 1. Element-by-element operations with matrices


Fig 4. Element-by-element operations with matrices


보시듯이, 기존의 matrix operation 앞에 점을 찍으면 element-by-element operation으로 사용할 수 있습니다.


덧붙여, 선언한 array를 함수의 입력으로 넣어주면 각 element에 적용됨을 확인할 수 있습니다(Fig 5 참고)


Fig 5. Function use with arrays



마지막으로 array와 관련된 여러 유용한 함수 몇 가지를 알려드리며 오늘 포스팅을 마무리하겠습니다.


 mean(A)

 A가 1D array일 경우, element의 평균을 반환

 A가 2D array일 경우, 각 column에서의 element의 평균을 반환

 max(A)



 [m, i] = max(A)


 A가 1D array일 경우, 가장 큰 element를 반환

 A가 2D array일 경우, 각 column에서의 최댓값들을 row vector의 형태로 반환


 A가 1D array일 경우, 가장 큰 element와 그 index를 각각 반환

 A가 2D array일 경우, 각 column에서의 최댓값들과 그 index들을 row vector의 형태로 반환

 min(A)



 [m, i] = min(A)


 A가 1D array일 경우, 가장 큰 element를 반환

 A가 2D array일 경우, 각 column에서의 최솟값들을 row vector의 형태로 반환


 A가 1D array일 경우, 가장 큰 element와 그 index를 각각 반환

 A가 2D array일 경우, 각 column에서의 최솟값들과 그 index들을 row vector의 형태로 반환

 sum(A)

 A가 1D array일 경우, 모든 element의 합을 반환

 A가 2D array일 경우, 각 column의 element의 합을 row vector의 형태로 반환

 sort(A)

 A가 1D array일 경우, element를 오름차순으로 정렬

 A가 2D array일 경우, 각 column에서 element를 오름차순으로 정렬

 median(A)

 A가 1D array일 경우, element의 중앙값을 반환

 A가 2D array일 경우, 각 column에서의 element의 중앙값을 row vector의 형태로 반환

 std(A)

 A가 1D array일 경우, element의 표준편차를 반환

 A가 2D array일 경우, 각 column에서의 element의 표준편차을 row vector의 형태로 반환

 (표본표준편차의 공식을 사용)

 det(A)

 Matrix A의 determinant를 반환

 dot(a,b)

 두 vector a와 b의 dot product 결과값을 반환

 cross(a,b)

 두 vector a와 b의 cross product 결과값을 반환

 inv(A)

 Matrix A의 역행렬을 반환

Table 2. Built-in functions for array analysis







Comments