lec 02. matrix: advanced

48
MATLAB Programming 행렬 다루기: 심화편 김탁은 [email protected] 1

Upload: tak-eun-kim

Post on 22-May-2015

1.075 views

Category:

Education


10 download

TRANSCRIPT

Page 1: Lec 02. Matrix: Advanced

MATLAB Programming

행렬 다루기: 심화편

김 탁 은[email protected]

1

Page 2: Lec 02. Matrix: Advanced

MATLAB Programming

서브 행렬로부터 행렬 만들기

각 행렬들을 서브(sub) 행렬로 하여 새로운 행렬 M 생성

p q

𝑴𝑴 = rs

>> B = [1 2; 3 4]

B =1 23 4

>> C = [ B zeros(2); ones(2) eye(2) ]

C =1 2 0 03 4 0 01 1 1 01 1 0 1

2

Page 3: Lec 02. Matrix: Advanced

MATLAB Programming

빈 행렬 (Empty Matrix)

Empty Matrix의 정의• 0 x 0, m x 0 x n, … 등 어느 한 dimension이라도 0인 것• 아래와 같이 행이나 열에 []을 대입하면 해당 행 또는 열이 제거됨

>> Z = []

Z =[]

>> M = magic(3)

M =8 1 63 5 74 9 2

>> M(2, :) = []

M =8 1 64 9 2

3

Page 4: Lec 02. Matrix: Advanced

MATLAB Programming

행렬에서 행/열의 합, 평균

sum(M) : 행 방향으로 원소들의 합 계산 sum(M,2) : 열 방향으로 원소들의 합 계산

mean(M) : 행 방향으로 원소들의 평균 계산 mean(M,2) : 열 방향으로 원소들의 평균 계산

s𝑢𝑢𝑢𝑢 𝑀𝑀 = 23 21 21

𝑀𝑀 =9 8 111 7 8

13 6 2

s𝑢𝑢𝑢𝑢 𝑀𝑀, 2=281621

𝑢𝑢𝑚𝑚𝑚𝑚𝑚𝑚 𝑀𝑀, 2=

9.33335.33337.0000

𝑢𝑢𝑚𝑚𝑚𝑚𝑚𝑚 𝑀𝑀 = 7.6667 7.0000 7.0000

4

Page 5: Lec 02. Matrix: Advanced

MATLAB Programming

행렬에서 행/열의 최대 및 최소

min(M) : 행 방향으로 원소들의 최소값 계산 min(M,[],2) : 열 방향으로 원소들의 최소값 계산

최소값이 위치한 인덱스?

𝑢𝑢𝑚𝑚𝑚𝑚 𝑀𝑀 = 1 6 2

𝑀𝑀 =9 8 111 7 8

13 6 2

𝑢𝑢𝑚𝑚𝑚𝑚 𝑀𝑀, , 2=812

>> [V, I] = min(M)

V =1 6 2

I =2 3 3

최소값

열에서최소값의위치

5

Page 6: Lec 02. Matrix: Advanced

MATLAB Programming

행렬에서 행/열의 분산, 표준편차

var(M) : 행 방향으로 원소들의 분산 계산 var(M,[],2) : 열 방향으로 원소들의 분산 계산

std(M) : 행 방향으로 원소들의 표준편차 계산 std(M,[],2) : 열 방향으로 원소들의 표준편차 계산

𝑣𝑣𝑚𝑚𝑣𝑣 𝑀𝑀 = 37.3333 1.0000 21.0000

𝑀𝑀 =9 8 111 7 8

13 6 2

𝑣𝑣𝑚𝑚𝑣𝑣 𝑀𝑀, , 2=

2.333314.333331.0000

𝑠𝑠𝑠𝑠𝑠𝑠 𝑀𝑀, , 2=

1.52753.78595.5678

𝑠𝑠𝑠𝑠𝑠𝑠 𝑀𝑀 = 6.1101 1.0000 4.5826

6

Page 7: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz (5min)

문제 4) 어은 초등학교 6학년 1반의 성적이 다음과 같다고 할 때, 이를 행렬로나타내고, 여러 가지 값들을 구해봅시다.

• 1) 각 과목별 평균, 분산, 최고점, 최저점

• 2) 각 학생별 총점 및 평균

• 3) 각 학생 별 최고점 받은 과목 점수

• 4) 반 전체 점수 합계 및 평균

국어 수학 과학 체육

영희 98 83 89 89

철수 89 92 97 87

민수 78 86 91 96

7

Page 8: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz Sol. (5min)

문제 4) 어은 초등학교 6학년 1반의 성적이 다음과 같다고 할 때, 이를 행렬로나타내고, 여러 가지 값들을 구해봅시다.

국어 수학 과학 체육

영희 98 83 89 89

철수 89 92 97 87

민수 78 86 91 96

>> S = [98 83 89 89; 89 92 97 87; 78 86 91 96]

S =

98 83 89 8989 92 97 8778 86 91 96

% 각 과목별 평균, 분산, 최고점, 최저점>> mean(S), var(S), max(S), min(S)

% 각 학생별 총점 및 평균>> sum(S’), mean(S’)

% 각 학생 별 최고점 받은 과목 점수>> max(S’)

% 반 전체 점수 합계 및 평균>> sum(sum(S)), mean(mean(S))

8

Page 9: Lec 02. Matrix: Advanced

MATLAB Programming

행렬의 차원 변경

reshape 함수• m x n 행렬 p x q 행렬로 변경• 변환하려는 행렬과 변환하고자 하는 행렬의 원소 수는 동일해야 함

(즉, m*n == p*q)

• reshape( m x n 행렬, p, q)

>> M = randi( 10, 3, 5)

M =

1 8 5 8 75 8 5 8 74 2 7 3 2

>> reshape(M, 5, 3)

ans =

1 2 85 5 34 5 78 7 78 8 2

9

Page 10: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz

문제 4) 1:27 벡터로부터 reshape 함수를 통해 다음 행렬을 만들어

봅시다.

• 𝑀𝑀 =1 2 3

10 11 1219 20 21

4 5 613 14 1522 23 24

7 8 916 17 1825 26 27

10

Page 11: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz Sol.

문제 4) 1:27 벡터로부터 reshape 함수를 통해 다음 행렬을 만들어봅시다.

• 𝑀𝑀 =1 2 3

10 11 1219 20 21

4 5 613 14 1522 23 24

7 8 916 17 1825 26 27

• 1:27 벡터로부터 reshape 함수를 통해 위의 M 행렬을 만드는 방법

>> v = 1:27

v =

Columns 1 through 111 2 3 4 5 6 7 8 9 10 11

Columns 12 through 2212 13 14 15 16 17 18 19 20 21 22

Columns 23 through 2723 24 25 26 27

>> reshape(v, 9, 3)'

ans =

1 2 3 4 5 6 7 8 910 11 12 13 14 15 16 17 1819 20 21 22 23 24 25 26 27

11

Page 12: Lec 02. Matrix: Advanced

MATLAB Programming

행렬 Reshaping

transpose

• 행렬 M의 원소가 𝑚𝑚𝑖𝑖𝑖𝑖일 때, 각 원소 𝑚𝑚𝑖𝑖𝑖𝑖 → 𝑚𝑚𝑖𝑖𝑖𝑖 인 변환

• 프라임 기호( ‘ ) 를 쓰거나, transpose 함수를 쓰면 됨

>> M = randi( 10, 3, 5)

M =

1 8 5 8 75 8 5 8 74 2 7 3 2

>> M’ % 프라임

ans =

1 5 48 8 25 5 78 8 37 7 2

>> transpose(M)

12

Page 13: Lec 02. Matrix: Advanced

MATLAB Programming

행렬 Reshaping

복소수 transpose

• 행렬 M의 원소가 𝑚𝑚𝑖𝑖𝑖𝑖이고, 각 원소가 복소수일 때, 각 원소 𝑚𝑚𝑖𝑖𝑖𝑖 → 𝑐𝑐𝑐𝑐𝑚𝑚𝑐𝑐(𝑚𝑚𝑖𝑖𝑖𝑖) 인 변환

• 프라임 기호( ‘ ) 를 쓰거나, ctranspose 함수를 쓰면 됨

>> M = randi(10,2,3) + i*randi(10,2,3)

M =

7.0000 + 8.0000i 10.0000 + 2.0000i 5.0000 + 5.0000i4.0000 + 8.0000i 1.0000 + 5.0000i 4.0000 + 7.0000i

>> ctranspose(M)

ans =

7.0000 - 8.0000i 4.0000 - 8.0000i10.0000 - 2.0000i 1.0000 - 5.0000i5.0000 - 5.0000i 4.0000 - 7.0000i

>> M’ % 프라임

z = a+biconj(z) = a-bi

13

Page 14: Lec 02. Matrix: Advanced

MATLAB Programming

행렬 Reshaping

transpose와 ctranspose 차이

• 각 원소가 실수인 행렬 M에 대해, transpose(M) 과 ctranspose(M)은 동일

• 각 원소가 복소수인 행렬 M에 대해, transpose(M) 과 ctranspose(M)은 서로 다름

>> M = magic(2)

M =1 34 2

>> transpose(M)

ans =1 43 2

>> ctranspose(M)

ans =1 43 2

>> M = magic(2)+magic(2)*i

M =1.0000 + 1.0000i 3.0000 + 3.0000i4.0000 + 4.0000i 2.0000 + 2.0000i

>> transpose(M)

ans =1.0000 + 1.0000i 4.0000 + 4.0000i3.0000 + 3.0000i 2.0000 + 2.0000i

>> ctranspose(M)

ans =1.0000 - 1.0000i 4.0000 - 4.0000i3.0000 - 3.0000i 2.0000 - 2.0000i

14

Page 15: Lec 02. Matrix: Advanced

MATLAB Programming

행렬 Reshaping

rot90( M )

• 행렬 M을 반시계 방향으로 90도 회전함

>> M = [1 2 3; 4 5 6]

M =

1 2 34 5 6

>> rot90(M)

ans =

3 62 51 4

15

Page 16: Lec 02. Matrix: Advanced

MATLAB Programming

행렬 Reshaping

>> M = magic(3)

M =

8 1 63 5 74 9 2

>> flipud(M)

ans =

4 9 23 5 78 1 6

flipud (flip up-down)

• 행렬 M을 상하로 회전시킴

>> M = magic(3)

M =

8 1 63 5 74 9 2

>> fliplr(M)

ans =

6 1 87 5 32 9 4

fliplr (flip left-right)

• 행렬 M을 좌우로 회전시킴

16

Page 17: Lec 02. Matrix: Advanced

MATLAB Programming

행렬 Reshaping

>> M = magic(3)

M =

8 1 63 5 74 9 2

>> flipud(M)

ans =

4 9 23 5 78 1 6

flipdim(M, 1)

• 행렬 M을 상하로 회전시킴

>> M = magic(3)

M =

8 1 63 5 74 9 2

>> fliplr(M)

ans =

6 1 87 5 32 9 4

flipdim(M, 2)

• 행렬 M을 좌우로 회전시킴

flipdim( M, dim )

• 행렬 M을 dim 방향으로 회전

17

Page 18: Lec 02. Matrix: Advanced

MATLAB Programming

행렬 Reshaping

circshift( M, shiftsize )

• 행렬 M의 행 또는 열을 shiftsize 만큼 shift

>> M = magic(3)

M =

8 1 63 5 74 9 2

>> circshift(M, -1)

ans =

3 5 74 9 28 1 6

circshift(M, -1)

>> M = magic(3)

M =

8 1 63 5 74 9 2

>> circshift(M, 1)

ans =

4 9 28 1 63 5 7

circshift(M, 1)

>> M = magic(3)

M =

8 1 63 5 74 9 2

>> circshift(M, [1 -1])

ans =

9 2 41 6 85 7 3

circshift(M, [1 -1])

18

Page 19: Lec 02. Matrix: Advanced

MATLAB Programming

행렬 복제

repmat 함수• B = repmat( m x n 행렬, p, q)

• m x n 행렬을 열 방향으로 p개, 행 방향으로 q개 복제하여 mp x nq행렬을 생성

>> M = [1 2 3; 4 5 6]

M =1 2 34 5 6

>> repmat( M, 1, 2 )

ans =1 2 3 1 2 34 5 6 4 5 6

>> v = [1 3 4];v =

1 3 4

>> repmat(v, 3, 2)

ans =1 3 4 1 3 41 3 4 1 3 41 3 4 1 3 4

19

Page 20: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz

4개의 2차원 공간상의 점들이 아래와 같이 행렬 M으로 주어져 있고, 점 Q가

아래와 같이 벡터로 주어졌을 때, 점 Q와 각 점들간의 유클리디언 거리를

구해보자.

• 𝑀𝑀 =1 35 62 38 9

, 𝑄𝑄 = 5 2

• 두 점 𝑃𝑃1 = 𝑥𝑥1 𝑦𝑦1 , 𝑃𝑃2 = 𝑥𝑥2 𝑦𝑦2 이 주어졌을 때,

– 유클리디언 거리 = 𝑥𝑥1 − 𝑥𝑥2 2 + 𝑦𝑦1 − 𝑦𝑦2 2

• Hint!

repmat을 이용해 Q를 4 x 2 행렬로 변환

Q와 M간의 행렬 연산을 통해 각 원소간 차의 제곱을 계산

sum 함수와 sqrt 함수 사용

20

Page 21: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz Sol.

4개의 2차원 공간상의 점들이 아래와 같이 행렬 M으로 주어져 있고, 점 Q가 아래와

같이 벡터로 주어졌을 때, 점 Q와 각 점들간의 유클리디언 거리를 구해보자.

• 𝑀𝑀 =1 35 62 38 9

, 𝑄𝑄 = 5 2

• 두 점 𝑃𝑃1 = 𝑥𝑥1 𝑦𝑦1 , 𝑃𝑃2 = 𝑥𝑥2 𝑦𝑦2 이 주어졌을 때,

– 유클리디언 거리 = 𝑥𝑥1 − 𝑥𝑥2 2 + 𝑦𝑦1 − 𝑦𝑦2 2

>> M = [1 3; 5 6; 2 3; 8 9]M =

1 35 62 38 9

>> Q = [5 2]Q =

5 2

>> rQ = repmat(Q, 4, 1)rQ =

5 25 25 25 2

>> (rQ-M).^2ans =

16 10 169 19 49

>> sqrt(sum((rQ-M).^2, 2))

ans =4.12314.00003.16237.6158

21

Page 22: Lec 02. Matrix: Advanced

MATLAB Programming

대각 행렬

행렬의 대각 원소를 제외한 나머지가 0인 행렬• diag(x): 대각 원소가 x의 원소들로 이루어지는 대각 행렬

• diag(x, k): x를 k번째 대각 위치에 넣음– k = 0 → 주대각선– k > 0 → 주대각선 윗부분– k < 0 → 주대각선 아랫부분

>> diag( [1 2 3] )

ans =1 0 00 2 00 0 3

>> diag( [1 2], 1 )

ans =0 1 00 0 20 0 0

>> diag( [3 4], -2 )

ans =0 0 0 00 0 0 03 0 0 00 4 0 0

22

Page 23: Lec 02. Matrix: Advanced

MATLAB Programming

삼각 행렬

Upper triangular matrix• triu(A) : 주 대각선 및 그 윗부분의 원소들만을 취함• triu(A, k) : A의 k번째 대각선 및 그 윗부분의 원소들만을 취함

Lower triangular matrix tril(A) : 주 대각선 및 그 아랫부분의 원소들만을 취함 tril(A, k) : A의 k번째 주 대각선 및 그 아랫부분의 원소들만을 취함

>> A = magic(3)

A =8 1 63 5 74 9 2

>> triu(A)

ans =8 1 60 5 70 0 2

>> triu(A, 1)

ans =0 1 60 0 70 0 0

>> A = magic(3)

A =8 1 63 5 74 9 2

>> tril(A)

ans =8 0 03 5 04 9 2

>> tril(A, 1)

ans =8 1 03 5 74 9 2

23

Page 24: Lec 02. Matrix: Advanced

MATLAB Programming

행과 열 재배치 (reordering)

주어진 행렬에서 행 또는 열의 위치를 변경하고자 할 때

• Col 1 ↔ Col 3, Col 2 ↔ Col 4 이므로, [1 2 3 4 5] [3 4 1 2 5]

𝑀𝑀 =8 56 6

1 6 25 7 6

3 69 2

1 1 75 8 8

>> M = randi(10, 4, 5)

M =8 5 1 6 26 6 5 7 63 6 1 1 79 2 5 8 8

>> M( :, [3 4 1 2 5])

ans =1 6 8 5 25 7 6 6 61 1 3 6 75 8 9 2 8

𝑀𝑀′ =1 65 7

8 5 26 6 6

1 15 8

3 6 79 2 8

24

Page 25: Lec 02. Matrix: Advanced

MATLAB Programming

• “행렬” “논리연산자” “조건” 으로 특정 조건 만족하는 행렬 원소 선택

• 선택된 원소의 값을 수정하려면

특정 조건 만족하는 행렬 원소

𝑀𝑀 =8 56 6

1 6 25 7 6

3 69 2

1 1 75 8 8

>> M <= 1ans =

0 0 1 0 00 0 0 0 00 0 1 1 00 0 0 0 0

>> find(M<=1)

ans =

91115

>> M(M <= 1) = -10 >> M(find(M<=1)) = -10

25

Page 26: Lec 02. Matrix: Advanced

MATLAB Programming

Sparse Matrix

원소들의 대부분이 0인 행렬

𝑀𝑀 =0 0 30 0 00 0 0

0 0 00 0 00 2 0

6 0 00 5 00 0 0

(1, 3) = 3(1, 7) = 6(2, 8) = 5(3, 5) = 2

full matrix

sparse matrix

sparse(M)

full(M)

26

Page 27: Lec 02. Matrix: Advanced

MATLAB Programming

Sparse Matrix

Sparse Matrix 에서 연산

• Full matrix 에서의 연산 방법을 그대로 적용 가능

>> M = zeros(4,6);>> M([1 5 7]) = [5 9 6]

M =

5 9 0 0 0 00 0 0 0 0 00 6 0 0 0 00 0 0 0 0 0

>> S = sparse(M)

S =

(1,1) 5(1,2) 9(3,2) 6

>> F = S * S'

F =

(1,1) 106(3,1) 54(1,3) 54(3,3) 36

>> full(F)

ans =

106 0 54 00 0 0 0

54 0 36 00 0 0 0

27

Page 28: Lec 02. Matrix: Advanced

MATLAB Programming

Sparse Matrix

Sparse Matrix vs Full Matrix

• 두 행렬이 차지하는 메모리 크기를 비교

>> M = zeros(100,100);>> M([1 5 10 23]) = [5 9 13 2];>> S = sparse(M);>> S = sparse(M)

S =

(1,1) 5(5,1) 9

(10,1) 13(23,1) 2

>> whosName Size Bytes Class Attributes

M 100x100 80000 double S 100x100 872 double sparse

28

Page 29: Lec 02. Matrix: Advanced

MATLAB Programming

다차원 배열 (Multidimensional Array)

2개 이상의 차원을 가질 수 있는 배열

n 차원 배열은 n-1 차원 배열을 아래 그림과 같이 쌓아놓은 것으로 생각할 수 있음

기존 2차원 행렬에 이용했던 방법을 다차원 배열에서도 그대로 이용

• 3차원 배열의 예

– 1st index : row index

– 2nd index : column index

– 3rd index: page index

3) 3, (4,3) 2, (4,3) 1, (4,3) 3, (3,3) 2, (3,3) 1, (3,3) 3, (2,3) 2, (2,3) 1, (2,3) 3, (1,3) 2, (1,3) 1, (1,

2) 3, (4,2) 2, (4,2) 1, (4,2) 3, (3,2) 2, (3,2) 1, (3,2) 3, (2,2) 2, (2,2) 1, (2,2) 3, (1,2) 2, (1,2) 1, (1,

1) 3, (4,1) 2, (4,1) 1, (4,1) 3, (3,1) 2, (3,1) 1, (3,1) 3, (2,1) 2, (2,1) 1, (2,1) 3, (1,1) 2, (1,1) 1, (1,

page

column

row

29

Page 30: Lec 02. Matrix: Advanced

MATLAB Programming

다차원 배열의 의미

m x n 픽셀 크기를 가지는 컬러 이미지는 RGB 또는 CYK 값으로 표현됨

즉, 이미지는 m x n x 3 의 행렬로 구성된다고 볼 수 있음

RGB or CYK

n

m

30

Page 31: Lec 02. Matrix: Advanced

MATLAB Programming

다차원 배열의 의미

MRI image

• 여러 장의 slice 이미지가 다차원 배열에 저장되어 있다고 볼 수 있음

31

Page 32: Lec 02. Matrix: Advanced

MATLAB Programming

다차원 배열의 생성

방법 1. 2차원 배열을 먼저 생성한 뒤, 2차원 배열을 한 차원씩

확장하여 생성

• 예를 들어, 3 x 3 x 2인 3차원 배열을 만드는 방법

>> A = magic(3)

A =8 1 63 5 74 9 2

>> A(:, :, 2) = [1 0 4; 3 5 6; 9 8 7]

A(:,:,1) =8 1 63 5 74 9 2

A(:,:,2) =1 0 43 5 69 8 7

1 page

2 page

32

Page 33: Lec 02. Matrix: Advanced

MATLAB Programming

다차원 배열의 생성

방법 2. 모든 2차원 배열을 먼저 생성한 뒤, cat 함수를 이용하여

생성한 배열들을 합침

• 예를 들어, 3 x 3 x 2인 3차원 배열을 만드는 방법

>> A = magic(3)

A =

8 1 63 5 74 9 2

>> B = [1 0 4; 3 5 6; 9 8 7]

B =

1 0 43 5 69 8 7

>> C = cat(3, A, B)

C(:,:,1) =

8 1 63 5 74 9 2

C(:,:,2) =

1 0 43 5 69 8 7

1 page

2 page

33

Page 34: Lec 02. Matrix: Advanced

MATLAB Programming

배열의 차원을 알아보는 함수

N = ndims(A)

• 다차원 배열 A의 차원의 개수를 알려줌

[m, n, p, q, …] = size(A)

• 각 차원의 크기를 알려줌

실습) 앞서 만든 3차원 배열 A에 대해 ndims(A), size(A)를 각각

실행해봅시다.

34

Page 35: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz

아래 두 3 x 3 x 2 배열을 각각 생성해 보자. 생성한 두 3차원 배열로부터 3 x 3 x

2 x 2인 4차원 배열을 생성해 보자.

1 0 43 5 69 8 7

5 7 80 1 94 3 6

6 8 34 3 65 9 2

1 0 34 −1 28 2 1

35

Page 36: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz Sol.

아래 두 3 x 3 x 2 배열을 각각 생성해 보자.

1 0 43 5 69 8 7

5 7 80 1 94 3 6

>> M1 = [5 7 8; 0 1 9; 4 3 6]

M1 =

5 7 80 1 94 3 6

>> M1(:,:,2) = [1 0 4; 3 5 6; 9 8 7]

M1(:,:,1) =

5 7 80 1 94 3 6

M1(:,:,2) =

1 0 43 5 69 8 7

36

Page 37: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz Sol.

아래 두 3 x 3 x 2 배열을 각각 생성해 보자.

>> M2 = [1 0 3; 4 -1 2; 8 2 1]

M2 =

1 0 34 -1 28 2 1

>> M2(:,:,2) = [6 8 3; 4 3 6; 5 9 2]

M2(:,:,1) =

1 0 34 -1 28 2 1

M2(:,:,2) =

6 8 34 3 65 9 2

6 8 34 3 65 9 2

1 0 34 −1 28 2 1

37

Page 38: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz Sol.

생성한 두 3차원 배열로부터 3 x 3 x 2 x 2인 4차원 배열을 생성해 보자.

>> M1(:,:,:,2) = M2

M1(:,:,1,1) =5 7 80 1 94 3 6

M1(:,:,2,1) =1 0 43 5 69 8 7

M1(:,:,1,2) =1 0 34 -1 28 2 1

M1(:,:,2,2) =6 8 34 3 65 9 2 38

Page 39: Lec 02. Matrix: Advanced

MATLAB Programming

다차원 배열에서 합, 평균

sum(M) : 첫 번째 차원 방향 원소들의 합 계산 sum(M, 2) : 두 번째 차원 방향으로 원소들의 합 계산 sum(M, 3) : 세 번째 차원 방향으로 원소들의 합 계산

1 0 43 5 69 8 7

5 7 80 1 94 3 6

s𝑢𝑢𝑢𝑢 𝑀𝑀 = 9 11 23

13 13 17 = 𝑠𝑠𝑢𝑢𝑢𝑢(𝑀𝑀)

s𝑢𝑢𝑢𝑢 𝑀𝑀, 2=5

1424

s𝑢𝑢𝑢𝑢 𝑀𝑀, 2=201013

6 17 123 6 15

13 11 13

39

Page 40: Lec 02. Matrix: Advanced

MATLAB Programming

다차원 배열에서 특정 영역의 값 가져오기

1 0 43 5 69 8 7

5 7 80 1 94 3 6

>> P1 = [5 7 8; 0 1 9; 4 3 6];>> P2 = [1 0 4; 3 5 6; 9 8 7];>> M = cat(3, P1, P2);

>> M(2:end, 2:end, 1)

ans =

1 93 6

1 0 43 5 69 8 7

5 7 80 1 94 3 6

>> M(2:3, 2:3, :)

ans(:,:,1) =1 93 6

ans(:,:,2) =5 68 7

40

Page 41: Lec 02. Matrix: Advanced

MATLAB Programming

다차원 배열에서 특정 영역의 값 가져오기

1 0 43 5 69 8 7

5 7 80 1 94 3 6

>> M(1, :, :)

ans(:,:,1) =

5 7 8

ans(:,:,2) =

1 0 4

1 0 43 5 69 8 7

5 7 80 1 94 3 6

>> M(:,3,:)

ans(:,:,1) =896

ans(:,:,2) =467

41

Page 42: Lec 02. Matrix: Advanced

MATLAB Programming

Singleton Dimension 제거

Singleton Dimension?

• 배열 A가 있을 때, 크기가 1인 차원

• 예) 16 x 16 x 1 x 27 세번째 차원이 singleton dimension

B = squeeze(A)

• 배열 A에서 싱글톤 차원을 제거

• 배열 A와 동일한 개수의 원소를 가진 배열 B를 리턴

>> Y = rand(2,1,3)

Y(:,:,1) =0.98980.0397

Y(:,:,2) =0.77790.9733

Y(:,:,3) =0.41510.3108

>> Z = squeeze(Y)

Z =0.9898 0.7779 0.41510.0397 0.9733 0.3108

>> mat=repmat(1,[1,1,5])

mat(:,:,1) =1

mat(:,:,2) =1

mat(:,:,3) =1

mat(:,:,4) =1

mat(:,:,5) =1

>> squeeze(mat)

ans =

11111

42

Page 43: Lec 02. Matrix: Advanced

MATLAB Programming

MRI 영상 분석의 예

단층 영상을 열(column)으로 잘라서 이미지를

재구성 하면, 측면 영상이 나옴

>> load mri>> D = squeeze(D);>> size(D)

ans =

128 128 27

>> I = D(:, 64, :);>> size(I)

ans =

128 1 27

>> I = squeeze(I);>> size(I)

ans =

128 27

>> imshow(I, map)

>> I2 = imresize(I, [128, 54]);>> imshow(I2, map)

43

Page 44: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz

A 백화점 체인의 매장별 항목별 분기별 매출액(단위: 백만원)은 다음과 같다.

아래 데이터를 3 x 2 x 4 배열로 표현하고, 다음을 계산해보자.

• 1) 각 매장의 각 항목별 1년 총 매출액과 분기별 평균 매출액

• 2) 각 매장의 1년 매출액

• 3) 2분기, 4분기의 서울 매장 정보만 가져오기

서울매장 대전매장

여성의류 200 80

가전 180 50

귀금속 500 120

서울매장 대전매장

여성의류 320 120

가전 210 65

귀금속 320 85

서울매장 대전매장

여성의류 560 220

가전 250 100

귀금속 630 160

1분기

서울매장 대전매장

여성의류 340 90

가전 120 50

귀금속 230 60

4분기3분기

2분기

44

Page 45: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz Sol.

A 백화점 체인의 매장별 항목별 분기별 매출액(단위: 백만원)은

다음과 같다. 아래 데이터를 3 x 2 x 4 배열로 표현하고, 다음을

계산해보자.

• 1) 각 매장의 각 항목별 1년 총 매출액과 분기별 평균 매출액

• 2) 각 매장의 1년 매출액

• 3) 2분기, 4분기의 서울 매장 정보만 가져오기

서울매장 대전매장

여성의류 200 80

가전 180 50

귀금속 500 120

서울매장 대전매장

여성의류 320 120

가전 210 65

귀금속 320 85

서울매장 대전매장

여성의류 560 220

가전 250 100

귀금속 630 160

1분기

서울매장 대전매장

여성의류 340 90

가전 120 50

귀금속 230 60

4분기3분기

2분기

>> Q1 = [200 80; 180 50; 500 120]

Q1 =200 80180 50500 120

>> Q2 = [320 120; 210 65; 320 85]

Q2 =320 120210 65320 85

>> Q3 = [560 220; 250 100; 630 160]

Q3 =560 220250 100630 160

>> Q4 = [340 90; 120 50; 230 60]

Q4 =340 90120 50230 60

45

Page 46: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz Sol.

A 백화점 체인의 매장별 항목별 분기별 매출액(단위: 백만원)은

다음과 같다. 아래 데이터를 3 x 2 x 4 배열로 표현하고, 다음을

계산해보자.

• 1) 각 매장의 각 항목별 1년 총 매출액과 분기별 평균 매출액

• 2) 각 매장의 1년 매출액

• 3) 2분기, 4분기의 서울 매장 정보만 가져오기

서울매장 대전매장

여성의류 200 80

가전 180 50

귀금속 500 120

서울매장 대전매장

여성의류 320 120

가전 210 65

귀금속 320 85

서울매장 대전매장

여성의류 560 220

가전 250 100

귀금속 630 160

1분기

서울매장 대전매장

여성의류 340 90

가전 120 50

귀금속 230 60

4분기3분기

2분기

>> M = cat(3, Q1, Q2, Q3, Q4)

M(:,:,1) =

200 80180 50500 120

M(:,:,2) =

320 120210 65320 85

M(:,:,3) =

560 220250 100630 160

M(:,:,4) =

340 90120 50230 60

46

Page 47: Lec 02. Matrix: Advanced

MATLAB Programming

Quiz Sol.

A 백화점 체인의 매장별 항목별 분기별 매출액(단위: 백만원)은

다음과 같다. 아래 데이터를 3 x 2 x 4 배열로 표현하고, 다음을

계산해보자.

• 1) 각 매장의 각 항목별 1년 총 매출액과 분기별 평균 매출액

• 2) 각 매장의 1년 매출액

• 3) 2분기, 4분기의 서울 매장 정보만 가져오기

서울매장 대전매장

여성의류 200 80

가전 180 50

귀금속 500 120

서울매장 대전매장

여성의류 320 120

가전 210 65

귀금속 320 85

서울매장 대전매장

여성의류 560 220

가전 250 100

귀금속 630 160

1분기

서울매장 대전매장

여성의류 340 90

가전 120 50

귀금속 230 60

4분기3분기

2분기

% 문제 1번 Solution

>> sum(M, 3)

ans =1420 510760 265

1680 425

>> mean(M, 3)

ans =355.0000 127.5000190.0000 66.2500420.0000 106.2500

% 문제 2번 Solution

>> sum( sum(M, 3) )

ans =3860 1200

% 문제 3번 Solution

>> M(:, 1, [2 4])

ans(:,:,1) =320210320

ans(:,:,2) =340120230

% squeeze

>> Y = M(:, 1, [2 4]);>> squeeze(Y)

ans =

320 340210 120320 230 47

Page 48: Lec 02. Matrix: Advanced

MATLAB Programming

다차원 배열 생성 함수

ones, zeros, rand, randn

>> ones(3, 3, 2)

ans(:,:,1) =

1 1 11 1 11 1 1

ans(:,:,2) =

1 1 11 1 11 1 1

>> zeros(3,3,2)

ans(:,:,1) =

0 0 00 0 00 0 0

ans(:,:,2) =

0 0 00 0 00 0 0

>> rand(3,3,2)

ans(:,:,1) =

0.0563 0.3996 0.29540.8547 0.3254 0.36610.3843 0.5554 0.3490

ans(:,:,2) =

0.6302 0.9444 0.91960.6644 0.3503 0.28870.9921 0.1930 0.5509

>> randn(3,3,2)

ans(:,:,1) =

0.8746 -0.2592 -0.8729-0.4928 0.2126 1.3399-0.4823 2.0369 -0.2154

ans(:,:,2) =

0.8979 -0.2592 0.96100.0597 0.9589 -0.5638

-0.5342 1.2668 -1.2888

48