행렬다루기 : 심화편 김탁은 kmste2@kaist.ac.kr 2
서브행렬로부터행렬만들기 각행렬들을서브 (sub) 행렬로하여새로운행렬 M 생성 r s p q >> B = [1 2; 3 4] B = 1 2 3 4 >> C = [ B zeros(2); ones(2) eye(2) ] C = 1 2 0 0 3 4 0 0 1 1 1 0 1 1 0 1 3
빈행렬 (Empty Matrix) Empty Matrix 의정의 0 x 0, m x 0 x n, 등어느한 dimension 이라도 0 인것 아래와같이행이나열에 [] 을대입하면해당행또는열이제거됨 >> Z = [] Z = [] >> M = magic(3) M = 8 1 6 3 5 7 4 9 2 >> M(2, :) = [] M = 8 1 6 4 9 2 4
행렬에서행 / 열의합, 평균 sum(m) : 행방향으로원소들의합계산 sum(m,2) : 열방향으로원소들의합계산 mean(m) : 행방향으로원소들의평균계산 mean(m,2) : 열방향으로원소들의평균계산 5
행렬에서행 / 열의최대및최소 min(m) : 행방향으로원소들의최소값계산 min(m,[],2) : 열방향으로원소들의최소값계산 최소값이위치한인덱스? >> [V, I] = min(m) V = 1 6 2 I = 2 3 3 최소값 열에서최소값의위치 6
행렬에서행 / 열의분산, 표준편차 var(m) : 행방향으로원소들의분산계산 var(m,[],2) : 열방향으로원소들의분산계산 std(m) : 행방향으로원소들의표준편차계산 std(m,[],2) : 열방향으로원소들의표준편차계산 7
Quiz (5min) 문제 4) 어은초등학교 6 학년 1 반의성적이다음과같다고할때, 이를행렬로나타내고, 여러가지값들을구해봅시다. 국어 수학 과학 체육 영희 98 83 89 89 철수 89 92 97 87 민수 78 86 91 96 1) 각과목별평균, 분산, 최고점, 최저점 2) 각학생별총점및평균 3) 각학생별최고점받은과목점수 4) 반전체점수합계및평균 8
Quiz Sol. (5min) 문제 4) 어은초등학교 6 학년 1 반의성적이다음과같다고할때, 이를행렬로나타내고, 여러가지값들을구해봅시다. >> S = [98 83 89 89; 89 92 97 87; 78 86 91 96] 국어 수학 과학 체육 영희 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 % 각과목별평균, 분산, 최고점, 최저점 >> mean(s), var(s), max(s), min(s) % 각학생별총점및평균 >> sum(s ), mean(s ) % 각학생별최고점받은과목점수 >> max(s ) % 반전체점수합계및평균 >> sum(sum(s)), mean(mean(s)) 9
행렬의차원변경 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 7 5 8 5 8 7 4 2 7 3 2 >> reshape(m, 5, 3) 1 2 8 5 5 3 4 5 7 8 7 7 8 8 2 10
Quiz 11
Quiz Sol. >> v = 1:27 v = Columns 1 through 11 1 2 3 4 5 6 7 8 9 10 11 Columns 12 through 22 12 13 14 15 16 17 18 19 20 21 22 Columns 23 through 27 23 24 25 26 27 >> reshape(v, 9, 3)' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 12
행렬 Reshaping >> M = randi( 10, 3, 5) M = 1 8 5 8 7 5 8 5 8 7 4 2 7 3 2 >> M % 프라임 1 5 4 8 8 2 5 5 7 8 8 3 7 7 2 >> transpose(m) 13
행렬 Reshaping z = a+bi conj(z) = a-bi >> M = randi(10,2,3) + i*randi(10,2,3) M = 7.0000 + 8.0000i 10.0000 + 2.0000i 5.0000 + 5.0000i 4.0000 + 8.0000i 1.0000 + 5.0000i 4.0000 + 7.0000i >> ctranspose(m) 7.0000-8.0000i 4.0000-8.0000i 10.0000-2.0000i 1.0000-5.0000i 5.0000-5.0000i 4.0000-7.0000i >> M % 프라임 14
행렬 Reshaping transpose 와 ctranspose 차이 각원소가실수인행렬 M 에대해, transpose(m) 과 ctranspose(m) 은동일 각원소가복소수인행렬 M 에대해, transpose(m) 과 ctranspose(m) 은서로다름 >> M = magic(2) M = 1 3 4 2 >> transpose(m) 1 4 3 2 >> ctranspose(m) 1 4 3 2 >> M = magic(2)+magic(2)*i M = 1.0000 + 1.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i 2.0000 + 2.0000i >> transpose(m) 1.0000 + 1.0000i 4.0000 + 4.0000i 3.0000 + 3.0000i 2.0000 + 2.0000i >> ctranspose(m) 1.0000-1.0000i 4.0000-4.0000i 3.0000-3.0000i 2.0000-2.0000i 15
행렬 Reshaping rot90( M ) 행렬 M 을반시계방향으로 90 도회전함 >> M = [1 2 3; 4 5 6] M = 1 2 3 4 5 6 >> rot90(m) 3 6 2 5 1 4 16
행렬 Reshaping fliplr (flip left-right) 행렬 M 을좌우로회전시킴 flipud (flip up-down) 행렬 M 을상하로회전시킴 >> M = magic(3) M = 8 1 6 3 5 7 4 9 2 >> fliplr(m) 6 1 8 7 5 3 2 9 4 >> M = magic(3) M = 8 1 6 3 5 7 4 9 2 >> flipud(m) 4 9 2 3 5 7 8 1 6 17
행렬 Reshaping flipdim( M, dim ) 행렬 M 을 dim 방향으로회전 flipdim(m, 2) 행렬 M 을좌우로회전시킴 >> M = magic(3) M = 8 1 6 3 5 7 4 9 2 >> fliplr(m) 6 1 8 7 5 3 2 9 4 flipdim(m, 1) 행렬 M 을상하로회전시킴 >> M = magic(3) M = 8 1 6 3 5 7 4 9 2 >> flipud(m) 4 9 2 3 5 7 8 1 6 18
행렬 Reshaping circshift( M, shiftsize ) 행렬 M 의행또는열을 shiftsize 만큼 shift circshift(m, 1) >> M = magic(3) M = 8 1 6 3 5 7 4 9 2 >> circshift(m, 1) 4 9 2 8 1 6 3 5 7 circshift(m, -1) >> M = magic(3) M = 8 1 6 3 5 7 4 9 2 >> circshift(m, -1) 3 5 7 4 9 2 8 1 6 circshift(m, [1-1]) >> M = magic(3) M = 8 1 6 3 5 7 4 9 2 >> circshift(m, [1-1]) 9 2 4 1 6 8 5 7 3 19
행렬복제 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 3 4 5 6 >> repmat( M, 1, 2 ) 1 2 3 1 2 3 4 5 6 4 5 6 >> v = [1 3 4]; v = 1 3 4 >> repmat(v, 3, 2) 1 3 4 1 3 4 1 3 4 1 3 4 1 3 4 1 3 4 20
Quiz 21
Quiz Sol. >> M = [1 3; 5 6; 2 3; 8 9] M = 1 3 5 6 2 3 8 9 >> Q = [5 2] Q = 5 2 >> rq = repmat(q, 4, 1) rq = 5 2 5 2 5 2 5 2 >> (rq-m).^2 16 1 0 16 9 1 9 49 >> sqrt(sum((rq-m).^2, 2)) 4.1231 4.0000 3.1623 7.6158 22
대각행렬 행렬의대각원소를제외한나머지가 0 인행렬 diag(x): 대각원소가 x 의원소들로이루어지는대각행렬 diag(x, k): x 를 k 번째대각위치에넣음 k = 0 주대각선 k > 0 주대각선윗부분 k < 0 주대각선아랫부분 >> diag( [1 2], 1 ) 0 1 0 0 0 2 0 0 0 >> diag( [1 2 3] ) 1 0 0 0 2 0 0 0 3 >> diag( [3 4], -2 ) 0 0 0 0 0 0 0 0 3 0 0 0 0 4 0 0 23
삼각행렬 Upper triangular matrix triu(a) : 주대각선및그윗부분의원소들만을취함 triu(a, k) : A 의 k 번째대각선및그윗부분의원소들만을취함 >> A = magic(3) >> triu(a) >> triu(a, 1) A = 8 1 6 3 5 7 4 9 2 8 1 6 0 5 7 0 0 2 0 1 6 0 0 7 0 0 0 Lower triangular matrix tril(a) : 주대각선및그아랫부분의원소들만을취함 tril(a, k) : A 의 k 번째주대각선및그아랫부분의원소들만을취함 >> A = magic(3) A = 8 1 6 3 5 7 4 9 2 >> tril(a) 8 0 0 3 5 0 4 9 2 >> tril(a, 1) 8 1 0 3 5 7 4 9 2 24
행과열재배치 (reordering) 주어진행렬에서행또는열의위치를변경하고자할때 Col 1 Col 3, Col 2 Col 4 이므로, [1 2 3 4 5] [3 4 1 2 5] >> M = randi(10, 4, 5) M = 8 5 1 6 2 6 6 5 7 6 3 6 1 1 7 9 2 5 8 8 >> M( :, [3 4 1 2 5]) 1 6 8 5 2 5 7 6 6 6 1 1 3 6 7 5 8 9 2 8 25
특정조건만족하는행렬원소 행렬 논리연산자 조건 으로특정조건만족하는행렬원소선택 >> M <= 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 >> find(m<=1) 9 11 15 선택된원소의값을수정하려면 >> M(M <= 1) = -10 >> M(find(M<=1)) = -10 26
Sparse Matrix 원소들의대부분이 0 인행렬 full matrix full(m) sparse(m) sparse matrix (1, 3) = 3 (1, 7) = 6 (2, 8) = 5 (3, 5) = 2 27
Sparse Matrix Sparse Matrix 에서연산 Full matrix 에서의연산방법을그대로적용가능 >> M = zeros(4,6); >> M([1 5 7]) = [5 9 6] M = 5 9 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 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) 106 0 54 0 0 0 0 0 54 0 36 0 0 0 0 0 28
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 >> whos Name Size Bytes Class Attributes M 100x100 80000 double S 100x100 872 double sparse 29
다차원배열 (Multidimensional Array) 2 개이상의차원을가질수있는배열 n 차원배열은 n-1 차원배열을아래그림과같이쌓아놓은것으로생각할수있음 기존 2 차원행렬에이용했던방법을다차원배열에서도그대로이용 3 차원배열의예 (1,1, 3) (2,1, 3) (1, 2, 3) (2, 2, 3) (1,3, 3) (2,3, 3) 1 st index : row index 2 nd index : column index 3 rd index: page index column (1,1, 2) (2,1, 2) (3,1, 2) (1, 2, 2) (2, 2, 2) (3, 2, 2) (3,1, 3) (1,3, (4,1, 3) 2) (2,3, 2) (3,3, 2) (3, 2, 3) (4, 2, 3) (3,3, 3) (4,3, 3) row (1,1,1) (2,1,1) (3,1,1) (1, 2,1) (2, 2,1) (3, 2,1) (1,3,1) (4,1, 2) (2,3,1) (3,3,1) (4, 2, 2) (4,3, 2) page (4,1,1) (4, 2,1) (4,3,1) 30
다차원배열의의미 m x n 픽셀크기를가지는컬러이미지는 RGB 또는 CYK 값으로표현됨 즉, 이미지는 m x n x 3 의행렬로구성된다고볼수있음 n m RGB or CYK 31
다차원배열의의미 MRI image 여러장의 slice 이미지가다차원배열에저장되어있다고볼수있음 32
다차원배열의생성 방법 1. 2차원배열을먼저생성한뒤, 2차원배열을한차원씩확장하여생성 예를들어, 3 x 3 x 2 인 3 차원배열을만드는방법 >> A(:, :, 2) = [1 0 4; 3 5 6; 9 8 7] >> A = magic(3) A = 8 1 6 3 5 7 4 9 2 A(:,:,1) = 8 1 6 3 5 7 4 9 2 A(:,:,2) = 1 0 4 3 5 6 9 8 7 1 page 2 page 33
다차원배열의생성 방법 2. 모든 2 차원배열을먼저생성한뒤, cat 함수를이용하여 생성한배열들을합침 예를들어, 3 x 3 x 2 인 3 차원배열을만드는방법 >> A = magic(3) A = 8 1 6 3 5 7 4 9 2 >> B = [1 0 4; 3 5 6; 9 8 7] B = 1 0 4 3 5 6 9 8 7 >> C = cat(3, A, B) C(:,:,1) = 8 1 6 3 5 7 4 9 2 C(:,:,2) = 1 0 4 3 5 6 9 8 7 1 page 2 page 34
배열의차원을알아보는함수 N = ndims(a) 다차원배열 A 의차원의개수를알려줌 [m, n, p, q, ] = size(a) 각차원의크기를알려줌 실습 ) 앞서만든 3 차원배열 A 에대해 ndims(a), size(a) 를각각 실행해봅시다. 35
Quiz 아래두 3 x 3 x 2 배열을각각생성해보자. 생성한두 3 차원배열로부터 3 x 3 x 2 x 2 인 4 차원배열을생성해보자. 36
Quiz Sol. 아래두 3 x 3 x 2 배열을각각생성해보자. >> M1 = [5 7 8; 0 1 9; 4 3 6] M1 = 5 7 8 0 1 9 4 3 6 >> M1(:,:,2) = [1 0 4; 3 5 6; 9 8 7] M1(:,:,1) = 5 7 8 0 1 9 4 3 6 M1(:,:,2) = 1 0 4 3 5 6 9 8 7 37
Quiz Sol. 아래두 3 x 3 x 2 배열을각각생성해보자. >> M2 = [1 0 3; 4-1 2; 8 2 1] M2 = 1 0 3 4-1 2 8 2 1 >> M2(:,:,2) = [6 8 3; 4 3 6; 5 9 2] M2(:,:,1) = 1 0 3 4-1 2 8 2 1 M2(:,:,2) = 6 8 3 4 3 6 5 9 2 38
Quiz Sol. 생성한두 3 차원배열로부터 3 x 3 x 2 x 2 인 4 차원배열을생성해보자. >> M1(:,:,:,2) = M2 M1(:,:,1,1) = 5 7 8 0 1 9 4 3 6 M1(:,:,2,1) = 1 0 4 3 5 6 9 8 7 M1(:,:,1,2) = 1 0 3 4-1 2 8 2 1 M1(:,:,2,2) = 6 8 3 4 3 6 5 9 2 39
다차원배열에서합, 평균 sum(m) : 첫번째차원방향원소들의합계산 sum(m, 2) : 두번째차원방향으로원소들의합계산 sum(m, 3) : 세번째차원방향으로원소들의합계산 40
다차원배열에서특정영역의값가져오기 >> 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) 1 9 3 6 >> M(2:3, 2:3, :) ans(:,:,1) = 1 9 3 6 ans(:,:,2) = 5 6 8 7 41
다차원배열에서특정영역의값가져오기 >> M(1, :, :) ans(:,:,1) = 5 7 8 ans(:,:,2) = 1 0 4 >> M(:,3,:) ans(:,:,1) = 8 9 6 ans(:,:,2) = 4 6 7 42
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) >> mat=repmat(1,[1,1,5]) Y(:,:,1) = 0.9898 0.0397 Y(:,:,2) = 0.7779 0.9733 Y(:,:,3) = 0.4151 0.3108 >> Z = squeeze(y) Z = 0.9898 0.7779 0.4151 0.0397 0.9733 0.3108 mat(:,:,1) = 1 mat(:,:,2) = 1 mat(:,:,3) = 1 mat(:,:,4) = 1 mat(:,:,5) = 1 >> squeeze(mat) 1 1 1 1 1 43
MRI 영상분석의예 >> load mri >> D = squeeze(d); >> size(d) 단층영상을열 (column) 으로잘라서이미지를 재구성하면, 측면영상이나옴 128 128 27 >> I = D(:, 64, :); >> size(i) 128 1 27 >> I = squeeze(i); >> size(i) 128 27 >> imshow(i, map) >> I2 = imresize(i, [128, 54]); >> imshow(i2, map) 44
Quiz A 백화점체인의매장별항목별분기별매출액 ( 단위 : 백만원 ) 은다음과같다. 아래데이터를 3 x 2 x 4 배열로표현하고, 다음을계산해보자. 1) 각매장의각항목별 1년총매출액과분기별평균매출액 2) 각매장의 1년매출액 3) 2분기, 4분기의서울매장정보만가져오기 1 분기 서울매장 대전매장 여성의류 200 80 가전 180 50 귀금속 500 120 2 분기 서울매장 대전매장 여성의류 320 120 가전 210 65 귀금속 320 85 3 분기 서울매장 대전매장 여성의류 560 220 가전 250 100 귀금속 630 160 4 분기 서울매장 대전매장 여성의류 340 90 가전 120 50 귀금속 230 60 45
Quiz Sol. A 백화점체인의매장별항목별분기별매출액 ( 단위 : 백만원 ) 은다음과같다. 아래데이터를 3 x 2 x 4 배열로표현하고, 다음을계산해보자. 1) 각매장의각항목별 1년총매출액과분기별평균매출액 2) 각매장의 1년매출액 3) 2분기, 4분기의서울매장정보만가져오기 1분기 2분기 서울매장 대전매장 서울매장 대전매장 여성의류 200 80 여성의류 320 120 가전 180 50 가전 210 65 귀금속 500 120 귀금속 320 85 3분기 4분기 서울매장 대전매장 서울매장 대전매장 여성의류 560 220 여성의류 340 90 가전 250 100 가전 120 50 귀금속 630 160 귀금속 230 60 >> Q1 = [200 80; 180 50; 500 120] Q1 = 200 80 180 50 500 120 >> Q2 = [320 120; 210 65; 320 85] Q2 = 320 120 210 65 320 85 >> Q3 = [560 220; 250 100; 630 160] Q3 = 560 220 250 100 630 160 >> Q4 = [340 90; 120 50; 230 60] Q4 = 340 90 120 50 230 60 46
Quiz Sol. A 백화점체인의매장별항목별분기별매출액 ( 단위 : 백만원 ) 은다음과같다. 아래데이터를 3 x 2 x 4 배열로표현하고, 다음을계산해보자. 1) 각매장의각항목별 1년총매출액과분기별평균매출액 2) 각매장의 1년매출액 3) 2분기, 4분기의서울매장정보만가져오기 1분기 2분기 서울매장 대전매장 서울매장 대전매장 여성의류 200 80 여성의류 320 120 가전 180 50 가전 210 65 귀금속 500 120 귀금속 320 85 >> M = cat(3, Q1, Q2, Q3, Q4) M(:,:,1) = 200 80 180 50 500 120 M(:,:,2) = 320 120 210 65 320 85 M(:,:,3) = 560 220 250 100 630 160 3 분기 서울매장 대전매장 여성의류 560 220 가전 250 100 귀금속 630 160 4 분기 서울매장 대전매장 여성의류 340 90 가전 120 50 귀금속 230 60 M(:,:,4) = 340 90 120 50 230 60 47
% 문제 1 번 Solution Quiz Sol. A 백화점체인의매장별항목별분기별매출액 ( 단위 : 백만원 ) 은다음과같다. 아래데이터를 3 x 2 x 4 배열로표현하고, 다음을계산해보자. 1) 각매장의각항목별 1년총매출액과분기별평균매출액 2) 각매장의 1년매출액 3) 2분기, 4분기의서울매장정보만가져오기 >> sum(m, 3) 1420 510 760 265 1680 425 >> mean(m, 3) 355.0000 127.5000 190.0000 66.2500 420.0000 106.2500 % 문제 2 번 Solution >> sum( sum(m, 3) ) 1 분기 서울매장 대전매장 여성의류 200 80 가전 180 50 귀금속 500 120 3 분기 서울매장 대전매장 여성의류 560 220 가전 250 100 귀금속 630 160 2 분기 서울매장 대전매장 여성의류 320 120 가전 210 65 귀금속 320 85 4 분기 서울매장 대전매장 여성의류 340 90 가전 120 50 귀금속 230 60 3860 1200 % 문제 3 번 Solution >> M(:, 1, [2 4]) ans(:,:,1) = 320 210 320 ans(:,:,2) = 340 120 230 % squeeze >> Y = M(:, 1, [2 4]); >> squeeze(y) 320 340 210 120 320 230 48
다차원배열생성함수 ones, zeros, rand, randn >> ones(3, 3, 2) >> zeros(3,3,2) >> rand(3,3,2) >> randn(3,3,2) ans(:,:,1) = ans(:,:,1) = ans(:,:,1) = ans(:,:,1) = 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0.0563 0.3996 0.2954 0.8547 0.3254 0.3661 0.3843 0.5554 0.3490 0.8746-0.2592-0.8729-0.4928 0.2126 1.3399-0.4823 2.0369-0.2154 ans(:,:,2) = ans(:,:,2) = ans(:,:,2) = ans(:,:,2) = 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0.6302 0.9444 0.9196 0.6644 0.3503 0.2887 0.9921 0.1930 0.5509 0.8979-0.2592 0.9610 0.0597 0.9589-0.5638-0.5342 1.2668-1.2888 49
MATLAB Data Types 50
MATLAB Data Types 51
Numeric Data Types default numeric data type 은 double Data Type Size (bytes) Min Max int8 1-128 128 int16 2-32768 32767 int32 4-2147483648 2147483647 uint8 1 0 255 uint16 2 0 65535 uint32 4 0 4294967295 single 4 1.1755e-38 3.4028e+38 double 8 2.2251e-308 1.7977e+308 데이터타입확인은 >> class(a) 데이터타입별 min/max 값은정수의경우 intmin() / intmax(), 실수의경우 realmin() / realmax() 52
Numeric Data Type 간변환 변환하고자하는데이터타입의이름을함수처럼사용하여, 행렬을매개변수로주면됨 >> A = rand(5,3); >> sa = single(a) >> ui8 = uint8(a) >> ui16 = uint16(sa) >> double(ui16) >> 주의할점 데이터범위가더넓은데이터타입에서데이터범위가좁은데이터타입으로변환시, 데이터손실이있을수있음. eg) A = uint32(257) 와 B = int8(a) 는서로다른값 53
Numeric Data Type 변환하는이유? 1. 매우큰배열을만들때, 메모리를절약하기위해 2. 크기가큰여러배열들간의연산시, 계산속도를빨리하기위해 >> clear all; clc; % double 타입의 1000 x 1000 행렬생성 >> da = rand(1000,1000); >> class(da) double % 두배열이차지하는메모리공간확인 >> whos Name Size Bytes Class Attributes da 1000x1000 8000000 double sa 1000x1000 4000000 single % double 타입행렬을 single 타입으로변환 >> sa = single(da); >> class(sa) single 54
문자열 문자열은작은따옴표로나타냄 >> x = hello world x = hello world 두문자열의합성 문자열은 1 x n 배열로취급됨 따라서두문자열의합성은두 1 x n 배열의합성방법과동일 대부분의경우두문자열의길이가서로다르므로, [x; y] 와같이문자열을합성하려고 하면에러가남 >> x = hello >> y = world >> z = [x y] z = hello world 55
문자열 문자열의길이 >> length(z) 11 문자열배열생성방법 I 각문자의길이가동일하도록 spacebar 로맞춰준다. >> A = [ apple ; orange ] Error using vertcat Dimensions of matrices being concatenated are not consistent. >> A = ['apple '; 'orange'] A = apple orange 56
문자열 문자열배열생성방법 II >> a = 'apple'; >> b = 'orange'; >> c = 'bananas'; >> abc = char(a,b,c) abc = apple orange bananas 문자열배열에서각문자열접근방법 >> abc( 1, : ) apple >> abc( 2, : ) orange >> abc( 3, : ) bananas 57
Cell 데이터타입 숫자 10 과문자 Hello World 를동시에한배열에저장할수있을까? >> [10 'Hello World'] Hello World 실패!! 의도와전혀다른예상치못한결과 Cell array 는서로다른타입의데이터들을한곳에저장가능 >> A{1,1} = 10 A = [10] >> A{1,2} = 'hello world' A = [10] 'hello world' 올바른결과 58
Cell 데이터타입 Cell() 함수이용하여 Cell 데이터생성 >> A = cell(1,2) A = [] [] >> A{1,1} = 10 A = [10] [] 1 x 2 크기의 cell 배열생성 배열원소접근방법과동일 [] 이아니라 {} 임을주의 >> A{1,2} = 'hello world' A = [10] 'hello world' Cell 데이터시각화 각셀에어떠한타입의데이터가있는지보여줌 >> cellplot(a, legend ) 59
Cell 데이터타입 Cell 안에 Cell 넣기 >> C = { [1 2], hello ; world, [3, 4] } C = [1x2 double] 'hello' 'world' [1x2 double] >> D = {C, 'kaist'; 'academy', 2014} D = {2x2 cell} 'kaist' 'academy' [2014] >> cellplot(d, legend ) Cell 안에 Cell 의원소접근하기 % hello 원소에접근하기 >> D{1,1}{1,2} % [1 2] 배열의원소접근하기 >> D{1,1}{1,1}(1) 60
Cell 에문자열저장하기 문자열저장하기 >> C = cell(1,3) C = [] [] [] >> C{1} = 'Seoul' C = 'Seoul' [] [] >> C{2} = 'Daejeon' C = 'Seoul' 'Daejeon' [] 문자열가져오기 >> >> C{1} Seoul >> C{2} Daejeon >> C{3} Busan >> C{3} = 'Busan' C = 'Seoul' 'Daejeon' 'Busan >> cellplot(c) 61
Quiz 문제 7) 다음과같은원소들로구성된 2 x 2 Cell 배열을만들어봅시다. 62