matlab for c/c++ programmers - kaist it academy web … · · 2014-01-0723 5 82 89 91 48 30 32 39...
TRANSCRIPT
MATLAB Programming
Quiz (3min)
문제 1) 1부터 10까지 10개의 연속된 숫자를 가진 벡터 x가 있을 때, 벡터 x의 짝수 번째에 위치한 값들을 벡터 x의 최대값에서 뺀 값으로 대체하여 봅시다.
• 𝑥 = [ 1 2 3 4 5 6 7 8 9 10 ]
• 𝑎𝑛𝑠 = [ 1 𝟖 3 𝟔 5 𝟒 7 𝟐 9 𝟎 ]
• Hint – 콜론 연산자, max 함수, 스칼라와 벡터의 차, 벡터의 일부 원소 변경
2
MATLAB Programming
Quiz Sol. (3min)
문제 1) 1부터 10까지 10개의 연속된 숫자를 가진 벡터 x가 있을 때, 벡터 x의 짝수 번째에 위치한 값들을 벡터 x의 최대값에서 뺀 값으로 대체하여 봅시다.
• 𝑥 = [ 1 2 3 4 5 6 7 8 9 10 ]
• 𝑎𝑛𝑠 = [ 1 𝟖 3 𝟔 5 𝟒 7 𝟐 9 𝟎 ]
3
>> x = 1:10
x =
1 2 3 4 5 6 7 8 9 10
>> x(2:2:10) = max(x) – x(2:2:10)
MATLAB Programming
Quiz (5min)
문제 2) 다음 연립 방정식을 행렬로 표현하고, 방정식의 근 x을 행렬 연산을 통해 계산해봅시다.
• 연립 방정식 −3𝑥1 − 𝑥3 = -3
2𝑥1 + 5𝑥2 − 7𝑥3 = 1
−𝑥1 + 4𝑥2 + 8𝑥3 = 2
• Hint – 방정식의 근 행렬로 구하기
• 𝐴𝑥 = 𝑏 ⇒ 𝐴−1𝐴𝑥 = 𝐼𝑥 = 𝑥 = 𝐴−1𝑏
– 행렬 M의 역행렬 구하는 함수
• inv(M)
4
MATLAB Programming
Quiz Sol. (5min)
문제 2) 다음 연립 방정식을 행렬로 표현하고, 방정식의 근 x을 행렬 연산을 통해 계산해봅시다.
• 연립 방정식 −3𝑥1 − 𝑥3 = -3
2𝑥1 + 5𝑥2 − 7𝑥3 = 1
−𝑥1 + 4𝑥2 + 8𝑥3 = 2
• Hint – 방정식의 근 행렬로 구하기
• 𝐴𝑥 = 𝑏 ⇒ 𝐴−1𝐴𝑥 = 𝐼𝑥 = 𝑥 = 𝐴−1𝑏
– 행렬 M의 역행렬 구하는 함수
• inv(M)
5
>> A = [-3 0 -1; 2 5 -7; -1 4 8]
A =
-3 0 -1
2 5 -7
-1 4 8
>> b = [-3 1 2]‘
b =
-3
1
2
>> x = inv(A) * b
x =
0.9124
0.2028
0.2627
MATLAB Programming
Quiz (5min)
문제 3) 10 x 10 magic 행렬을 생성에서 짝수 행, 홀수 열인 원소들의 값을 5 x 5 magic 행렬 값으로 대체하세요.
6
M =
92 99 1 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 27 59
M =
92 99 1 8 15 67 74 51 58 40
17 80 24 14 1 73 8 57 15 41
4 81 88 20 22 54 56 63 70 47
23 87 5 21 7 60 14 69 16 28
86 93 25 2 9 61 68 75 52 34
4 24 6 83 13 42 20 26 22 65
23 5 82 89 91 48 30 32 39 66
10 6 12 95 19 29 21 38 3 72
10 12 94 96 78 35 37 44 46 53
11 18 18 77 25 36 2 50 9 59
MATLAB Programming
Quiz Sol. (5min)
문제 3) 10 x 10 magic 행렬을 생성에서 짝수 행, 홀수 열인 원소들의 값을 5 x 5 magic 행렬 값으로 대체하세요.
7
M =
92 99 1 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 27 59
M =
92 99 1 8 15 67 74 51 58 40
17 80 24 14 1 73 8 57 15 41
4 81 88 20 22 54 56 63 70 47
23 87 5 21 7 60 14 69 16 28
86 93 25 2 9 61 68 75 52 34
4 24 6 83 13 42 20 26 22 65
23 5 82 89 91 48 30 32 39 66
10 6 12 95 19 29 21 38 3 72
10 12 94 96 78 35 37 44 46 53
11 18 18 77 25 36 2 50 9 59
>> M = magic( 10 );
>> M(2:2:end, 1:2:end) = magic(5)
MATLAB Programming
서브 행렬로부터 행렬 만들기
각 행렬들을 서브(sub) 행렬로 하여 새로운 행렬 M 생성
9
p q
𝑴 = r
s
>> 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
MATLAB Programming
빈 행렬 (Empty Matrix)
Empty Matrix의 정의 • 0 x 0, m x 0 x n, … 등 어느 한 dimension이라도 0인 것
• 아래와 같이 행이나 열에 []을 대입하면 해당 행 또는 열이 제거됨
10
>> Z = []
Z =
[]
>> M = magic(3)
M =
8 1 6
3 5 7
4 9 2
>> M(2, :) = []
M =
8 1 6
4 9 2
MATLAB Programming
행렬 transpose
행렬 M의 원소가 𝑎𝑖𝑗일 때
• 𝑎𝑖𝑗 → 𝑎𝑗𝑖
11
>> M = randi( 10, 3, 5)
M =
1 8 5 8 7
5 8 5 8 7
4 2 7 3 2
>> M’ % 프라임
ans =
1 5 4
8 8 2
5 5 7
8 8 3
7 7 2
MATLAB Programming
행렬에서 행/열의 합, 평균
sum(M) : 행 방향으로 원소들의 합 계산
sum(M,2) : 열 방향으로 원소들의 합 계산
mean(M) : 행 방향으로 원소들의 평균 계산
mean(M,2) : 열 방향으로 원소들의 평균 계산
12
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
MATLAB Programming
행렬에서 행/열의 최대 및 최소
min(M) : 행 방향으로 원소들의 최소값 계산
min(M,[],2) : 열 방향으로 원소들의 최소값 계산
최소값이 위치한 인덱스?
13
𝑚𝑖𝑛 𝑀 = 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
최소값
열에서 최소값의 위치
MATLAB Programming
행렬에서 행/열의 분산, 표준편차
var(M) : 행 방향으로 원소들의 분산 계산
var(M,[],2) : 열 방향으로 원소들의 분산 계산
std(M) : 행 방향으로 원소들의 표준편차 계산
std(M,[],2) : 열 방향으로 원소들의 표준편차 계산
14
𝑣𝑎𝑟 𝑀 = 37.3333 1.0000 21.0000
𝑀 = 9 8 111 7 8
13 6 2
𝑣𝑎𝑟 𝑀, , 2 =
2.3333
14.333331.0000
𝑠𝑡𝑑 𝑀, , 2 =
1.52753.78595.5678
𝑠𝑡𝑑 𝑀 = 6.1101 1.0000 4.5826
MATLAB Programming
Quiz (5min)
문제 4) 어은 초등학교 6학년 1반의 성적이 다음과 같다고 할 때, 이를 행렬로 나타내고, 여러 가지 값들을 구해봅시다.
• 1) 각 과목별 평균, 분산, 최고점, 최저점
• 2) 각 학생별 총점 및 평균
• 3) 각 학생 별 최고점 받은 과목 점수
• 4) 반 전체 점수 합계 및 평균
15
국어 수학 과학 체육
영희 98 83 89 89
철수 89 92 97 87
민수 78 86 91 96
MATLAB Programming
Quiz Sol. (5min)
문제 4) 어은 초등학교 6학년 1반의 성적이 다음과 같다고 할 때, 이를 행렬로 나타내고, 여러 가지 값들을 구해봅시다.
16
국어 수학 과학 체육
영희 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 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))
MATLAB Programming
행렬의 차원 변경
reshape 함수 • m x n 행렬 p x q 행렬로 변경
• 변환하려는 행렬과 변환하고자 하는 행렬의 원소 수는 동일해야 함 (즉, m*n == p*q)
• reshape( m x n 행렬, p, q)
17
>> 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)
ans =
1 2 8
5 5 3
4 5 7
8 7 7
8 8 2
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
18
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 행렬을 만드는 방법
19
>> 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)'
ans =
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
MATLAB Programming
행렬 복제
repmat 함수 • B = repmat( m x n 행렬, p, q)
• m x n 행렬을 열 방향으로 p개, 행 방향으로 q개 복제하여 mp x nq 행렬을 생성
20
>> M = [1 2 3; 4 5 6]
M =
1 2 3
4 5 6
>> repmat( M, 1, 2 )
ans =
1 2 3 1 2 3
4 5 6 4 5 6
>> v = [1 3 4];
v =
1 3 4
>> repmat(v, 3, 2)
ans =
1 3 4 1 3 4
1 3 4 1 3 4
1 3 4 1 3 4
MATLAB Programming
Quiz
문제 5) 5개의 2차원 공간상의 점들이 아래와 같이 행렬 M으로 주어져 있고, 점 Q가 아래와 같이 벡터로 주어졌을 때, 점 Q와 각 점들간의 유클리디언 거리를 구해보세요.
• 𝑀 =
1 35 62 38 9
, 𝑄 = 5 2
• 두 점 𝑃1 = 𝑥1 𝑦1 , 𝑃2 = 𝑥2 𝑦2 이 주어졌을 때,
– 유클리디언 거리 = 𝑥1 − 𝑥22 + 𝑦1 − 𝑦2
2
• Hint! repmat을 이용해 Q를 4 x 2 행렬로 변환
Q와 M간의 행렬 연산을 통해 각 원소간 차의 제곱을 계산
sum 함수와 sqrt 함수 사용
21
MATLAB Programming
Quiz Sol.
문제 5) 5개의 2차원 공간상의 점들이 아래와 같이 행렬 M으로 주어져 있고, 점 Q가 아래와 같이 벡터로 주어졌을 때, 점 Q와 각 점들간의 유클리디언 거리를 구해보세요.
• 𝑀 =
1 35 62 38 9
, 𝑄 = 5 2
• 두 점 𝑃1 = 𝑥1 𝑦1 , 𝑃2 = 𝑥2 𝑦2 이 주어졌을 때,
– 유클리디언 거리 = 𝑥1 − 𝑥22 + 𝑦1 − 𝑦2
2
22
>> 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
ans =
16 1
0 16
9 1
9 49
>> sqrt(sum((rQ-M).^2, 2))
ans =
4.1231
4.0000
3.1623
7.6158
MATLAB Programming
대각 행렬
행렬의 대각 원소를 제외한 나머지가 0인 행렬 • diag(x): 대각 원소가 x의 원소들로 이루어지는 대각 행렬
• diag(x, k): x를 k번째 대각 위치에 넣음 – k = 0 → 주대각선
– k > 0 → 주대각선 윗부분
– k < 0 → 주대각선 아랫부분
23
>> diag( [1 2 3] )
ans =
1 0 0
0 2 0
0 0 3
>> diag( [1 2], 1 )
ans =
0 1 0
0 0 2
0 0 0
>> diag( [3 4], -2 )
ans =
0 0 0 0
0 0 0 0
3 0 0 0
0 4 0 0
MATLAB Programming
삼각 행렬
Upper triangular matrix • triu(A) : 주 대각선 및 그 윗부분의 원소들만을 취함
• triu(A, k) : A의 k번째 대각선 및 그 윗부분의 원소들만을 취함
Lower triangular matrix tril(A) : 주 대각선 및 그 아랫부분의 원소들만을 취함 tril(A, k) : A의 k번째 주 대각선 및 그 아랫부분의 원소들만을 취함
24
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> triu(A)
ans =
8 1 6
0 5 7
0 0 2
>> triu(A, 1)
ans =
0 1 6
0 0 7
0 0 0
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> tril(A)
ans =
8 0 0
3 5 0
4 9 2
>> tril(A, 1)
ans =
8 1 0
3 5 7
4 9 2
MATLAB Programming
행과 열 재배치 (reordering)
주어진 행렬에서 행 또는 열의 위치를 변경하고자 할 때
• Col 1 ↔ Col 3, Col 2 ↔ Col 4 이므로, [1 2 3 4 5] [3 4 1 2 5]
25
𝑀 =
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 2
6 6 5 7 6
3 6 1 1 7
9 2 5 8 8
>> M( :, [3 4 1 2 5])
ans =
1 6 8 5 2
5 7 6 6 6
1 1 3 6 7
5 8 9 2 8
𝑀′ =
1 65 7
8 5 26 6 6
1 15 8
3 6 79 2 8
MATLAB Programming
• “행렬” “논리연산자” “조건” 으로 특정 조건 만족하는 행렬 원소 선택
• 선택된 원소의 값을 수정하려면
특정 조건 만족하는 행렬 원소
26
𝑀 =
8 56 6
1 6 25 7 6
3 69 2
1 1 75 8 8
>> M <= 1
ans =
0 0 1 0 0
0 0 0 0 0
0 0 1 1 0
0 0 0 0 0
>> find(M<=1)
ans =
9
11
15
>> M(M <= 1) = -10 >> M(find(M<=1)) = -10
MATLAB Programming
Sparse Matrix
원소들의 대부분이 0인 행렬
27
𝑀 = 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)
MATLAB Programming
다차원 배열 (Multidimensional Array)
2개 이상의 차원을 가질 수 있는 배열
n 차원 배열은 n-1 차원 배열을 아래 그림과 같이 쌓아놓은 것으로 생각할 수 있음
기존 2차원 행렬에 이용했던 방법을 다차원 배열에서도 그대로 이용
• 3차원 배열의 예
– 1st index : row index
– 2nd index : column index
– 3rd index: page index
28
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
MATLAB Programming
다차원 배열의 의미
m x n 픽셀 크기를 가지는 컬러 이미지는 RGB 또는 CYK 값으로 표현됨
즉, 이미지는 m x n x 3 의 행렬로 구성된다고 볼 수 있음
29
RGB or CYK
n
m
MATLAB Programming
다차원 배열의 생성
2차원 배열을 먼저 생성한 뒤, 2차원 배열을 한 차원씩 확장하여 생성 • 예를 들어, 3 x 3 x 2인 3차원 배열을 만드는 방법
30
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> A(:, :, 2) = [1 0 4; 3 5 6; 9 8 7]
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
MATLAB Programming
배열의 차원을 알아보는 함수
N = ndims(A) • 다차원 배열 A의 차원의 개수를 알려줌
[m, n, p, q, …] = size(A) • 각 차원의 크기를 알려줌
실습) 앞서 만든 3차원 배열 A에 대해 ndims(A), size(A)를 각각 실행해봅시다.
31
MATLAB Programming
Quiz
문제 6) 아래 두 3 x 3 x 2 배열을 생성해 봅시다. 그리고 두 배열로부터 3 x 3 x 2 x 2인 4차원 배열을 생성해 봅시다.
32
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
MATLAB Programming
다차원 배열에서 합, 평균
sum(M) : 첫 번째 차원 방향 원소들의 합 계산
sum(M, 2) : 두 번째 차원 방향으로 원소들의 합 계산
sum(M, 3) : 세 번째 차원 방향으로 원소들의 합 계산
33
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
MATLAB Programming
다차원 배열 생성 함수
ones, zeros, rand, randn
34
>> ones(3, 3, 2)
ans(:,:,1) =
1 1 1
1 1 1
1 1 1
ans(:,:,2) =
1 1 1
1 1 1
1 1 1
>> zeros(3,3,2)
ans(:,:,1) =
0 0 0
0 0 0
0 0 0
ans(:,:,2) =
0 0 0
0 0 0
0 0 0
>> rand(3,3,2)
ans(:,:,1) =
0.0563 0.3996 0.2954
0.8547 0.3254 0.3661
0.3843 0.5554 0.3490
ans(:,:,2) =
0.6302 0.9444 0.9196
0.6644 0.3503 0.2887
0.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.9610
0.0597 0.9589 -0.5638
-0.5342 1.2668 -1.2888
MATLAB Programming
MATLAB Data Types
35
MATLAB Programming
MATLAB Data Types
36
MATLAB Programming
Numeric Data Types
default numeric data type은 double
• 데이터 타입 확인은 >> class(A)
• 데이터 타입 별 min/max 값은 정수의 경우 intmin() / intmax(), 실수의 경우 realmin() / realmax()
37
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
MATLAB Programming
Numeric Data Type간 변환
변환하고자 하는 데이터 타입의 이름을 함수처럼 사용하여, 행렬을 매개변수로 주면 됨
주의할 점 • 데이터 범위가 더 넓은 데이터 타입에서 데이터 범위가 좁은 데이터 타입으로 변환 시,
데이터 손실이 있을 수 있음.
• eg) A = uint32(257)와 B = int8(A)는 서로 다른 값
38
>> A = rand(5,3);
>> sA = single(A)
>> ui8 = uint8(A)
>> ui16 = uint16(sA)
>> double(ui16)
>> …
MATLAB Programming
Numeric Data Type 변환 하는 이유?
매우 큰 배열을 만들 때, 메모리를 절약하기 위해 다른 Numeric Data Type으로 변환할 필요가 있음
39
>> clear all; clc;
% double 타입의 1000 x 1000 행렬 생성
>> dA = rand(1000,1000);
>> class(dA)
ans =
double
% double 타입 행렬을 single 타입으로 변환
>> sA = single(dA);
>> class(sA)
ans =
single
% 두 배열이 차지하는 메모리 공간 확인
>> whos
Name Size Bytes Class Attributes
dA 1000x1000 8000000 double
sA 1000x1000 4000000 single
MATLAB Programming
문자열
문자열은 작은 따옴표로 나타냄
두 문자열의 합성 • 문자열은 1 x n 배열로 취급됨
• 따라서 두 문자열의 합성은 두 1 x n 배열의 합성 방법과 동일
• 대부분의 경우 두 문자열의 길이가 서로 다르므로, [x; y] 와 같이 문자열을 합성하려고 하면 에러가 남
40
>> x = ‘hello world’
x =
hello world
>> x = ‘hello ’
>> y = ‘world’
>> z = [x y]
z =
hello world
MATLAB Programming
문자열
문자열의 길이
문자열 배열 생성 방법 I • 각 문자의 길이가 동일하도록 spacebar로 맞춰준다.
41
>> length(z)
ans =
11
>> A = [‘apple’; ‘orange’]
Error using vertcat
Dimensions of matrices being concatenated are not consistent.
>> A = ['apple '; 'orange']
A =
apple
orange
MATLAB Programming
문자열
문자열 배열 생성 방법 II
문자열 배열에서 각 문자열 접근 방법
42
>> a = 'apple';
>> b = 'orange';
>> c = 'bananas';
>> abc = char(a,b,c)
abc =
apple
orange
bananas
>> abc( 1, : )
ans =
apple
>> abc( 2, : )
ans =
orange
>> abc( 3, : )
ans =
bananas
MATLAB Programming
Cell 데이터 타입
숫자 10과 문자 ‘Hello World’를 동시에 한 배열에 저장할 수 있을까?
Cell array는 서로 다른 타입의 데이터들을 한 곳에 저장 가능
43
>> [10 'Hello World']
ans =
Hello World
실패!!
의도와 전혀 다른
예상치 못한 결과
>> A{1,1} = 10
A =
[10]
>> A{1,2} = 'hello world'
A =
[10] 'hello world'
올바른 결과
MATLAB Programming
Cell 데이터 타입
Cell() 함수 이용하여 Cell 데이터 생성
Cell 데이터 시각화 • 각 셀에 어떠한 타입의 데이터가 있는지 보여줌
44
>> A = cell(1,2)
A =
[] []
>> A{1,1} = 10
A =
[10] []
>> A{1,2} = 'hello world'
A =
[10] 'hello world'
1 x 2 크기의 cell 배열 생성
• 배열 원소 접근 방법과 동일
• []이 아니라 {}임을 주의
>> cellplot(A, ‘legend’)
MATLAB Programming
Cell 데이터 타입
Cell 안에 Cell 넣기
Cell 안에 Cell의 원소 접근하기
45
>> 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’)
% “hello” 원소에 접근하기
>> D{1,1}{1,2}
% [1 2] 배열의 원소 접근하기
>> D{1,1}{1,1}(1)
MATLAB Programming
Cell에 문자열 저장하기
46
>> C = cell(1,3)
C =
[] [] []
>> C{1} = 'Seoul'
C =
'Seoul' [] []
>> C{2} = 'Daejeon'
C =
'Seoul' 'Daejeon' []
>> C{3} = 'Busan'
C =
'Seoul' 'Daejeon' 'Busan‘
>> cellplot(C)
문자열 저장하기 문자열 가져오기
>> >> C{1}
ans =
Seoul
>> C{2}
ans =
Daejeon
>> C{3}
ans =
Busan
MATLAB Programming
Quiz
문제 7) 다음과 같은 원소들로 구성된 2 x 2 Cell 배열을 만들어 봅시다.
47
[1 2] ′KA𝐼𝑆𝑇′2 + 3𝑖 5