MATLAB 에는 약간 독특한 cell 이라는 class 가 존재 합니다.
cell class 는 타입을 안 가리고 다 저장 하거든요.
숫자 문자를 가리지 않고 하나의 변수로 관리 할 수 있습니다.
struct class 처럼 field 로 구분하는 것도 아닌 게 한 변수에 막 집어 넣으니깐 처음에는 참 신기하더군요.
perl 을 접하신 분은 '당연한 거 아냐?' 하실 지도 …..
아무튼 이 cell 타입이라는 게 나중에는 참 쓸모가 많아 지니깐, 알아 두시면 도움이 됩니다.
아!! 여담으로 MATLAB 에서 perl script 도 실행이 가능 합니다.
MATLAB 에서 perl() 함수를 찾아 보시길~ 이런 것도 되? 하면서 좋아하실 분들도 있을 거라 생각 됩니다. 아닌가? ㅡㅡ;
cell class 의 변수를 설정 하는 방법은 다음과 같이 두 가지 방법이 있습니다.
- 중괄호 {} 를 이용하는 방법
A={1:10, 'abc'; zeros(3), 'cell'}
A =
[1x10 double] 'abc'
[3x3 double] 'cell'
- cell() 함수를 이용하는 방법
A=cell(2)
A=cell(2,2)
A =
[] []
[] []
위 명령들은 A 를 2행 2열의 empty cell로 만들어 줍니다.
cell A 의 각 인자에 값을 넣을때는 다음과 같이 표현 합니다.
A{1, 2}='1 row 2 column'
A =
[] '1 row 2 column'
[] []
위 코드는 A 의 1 행 2열에 문자열을 입력한 경우 입니다. matrix 에서는 각 인자의 값에 접근 할 때 ()괄호를 이용하였지만, cell class 에서는 중괄호를 이용한다는데 주의 하셔야 합니다.
괄호를 이용하여 A 의 2행 2열에 값을 입력하고 싶을 때는 다음과 같이 표현해야 합니다.
A(2, 2)={1:10} % 등호 우측에 중괄호를 이용하여 cell 을 넣어줌
A =
[] '1 row 2 column'
[] [1x10 double]
괄호를 이용하여 다음과 같이 접근 해 보죠.
A={1:10, 'abc'; zeros(3), 'cell'}
A =
[1x10 double] 'abc'
[3x3 double] 'cell'
B=A(1,2) % A 의 1 행 2열 에 괄호를 이용
B =
'abc'
class(B)
ans =
cell
B 는 cell class 의 값 입니다.
즉 B = {'abc'} 라고 표현한 것과 같은 것입니다.
cell 에는 어떤 타입이든 담을 수 있기 때문에 cell 안에 cell을 담을 수도 있습니다.
A={1:10, 'abc'; zeros(3), 'cell'}
A =
[1x10 double] 'abc'
[3x3 double] 'cell'
B=cell(2)
B =
[] []
[] []
B{1,1}=A % B 의 1행 1열에 cell A 를 입력
B =
{2x2 cell} []
[] []
B{2,2}=ones(3)
B =
{2x2 cell} []
[] [3x3 double]
cell 안에 어떤 내용이 담겨 있나 구체적으로 알고 싶을 때는 cellplot() 함수를 이용하면 시각적으로 볼 수 있습니다.
cellplot(B,'legend')
celldisp() 함수를 이용하면 단순히 command 창에 그 값들을 나열하게 됩니다.
celldisp(B)
B{1,1}{1,1} =
1 2 3 4 5 6 7 8 9 10
B{1,1}{2,1} =
0 0 0
0 0 0
0 0 0
B{1,1}{1,2} =
abc
B{1,1}{2,2} =
cell
B{2,1} =
[]
B{1,2} =
[]
B{2,2} =
1 1 1
1 1 1
1 1 1
cell B 의 1행 1열안의 2행 2열에 있는 cell 이라는 문자열에 접근 하기 위해서는 다음과 같이 표현 하면 됩니다.
B{1,1}{2,2}
ans =
cell
cell 이라는 문자열의 2번째 글자인 e 를 나타내려면 다음과 같이 입력하면 됩니다.
B{1,1}{2,2}(2)
ans =
e
이제 cell A,B 를 C 라는 cell 에 넣어 볼까요...
C={A, B}
C =
{2x2 cell} {2x2 cell}
size(C)
ans =
1 2
C는 1행 2열의 cell 이 됩니다.
C={A ; B}
C =
{2x2 cell}
{2x2 cell}
size(C)
ans =
2 1
이렇게 하니깐 C 가 2행 1열의 cell 이 되죠.
그럼 2행 2열의 cell A와 2행 2열의 cell B 를 붙여서 4 행 2열을 만들고 싶으면 어떻게 해야 될까요.
이럴 때는 대괄호를 이용합니다.
D=[A B]
D =
[1x10 double] 'abc' {2x2 cell} []
[3x3 double] 'cell' [] [3x3 double]
D=[A ; B]
D =
[1x10 double] 'abc'
[3x3 double] 'cell'
{2x2 cell } []
[] [3x3 double]
: 콜론을 이용하여 cell D 에 다음과 같이 값을 할당 해 보죠.
D(:,1)={1, 2, 3, 4}
D =
[1] 'abc'
[2] 'cell'
[3] []
[4] [3x3 double]
위와 같은 표현은 구버전의 MATLAB 을 이용하시는 분들은 실행이 안 될 수 있습니다.
그럴 때는 deal() 함수를 이용하시면 됩니다.
[D{:,1}]=deal(1,2,3,4)
D =
[1] 'abc'
[2] 'cell'
[3] []
[4] [3x3 double]
콜론을 이용하여 cell 의 값을 반환하는 예를 보죠.
f=D{:,1}
f =
1
위 코드는 이상하게도 1 만 나오죠?
1, 2, 3, 4를 벡터로 나타낼 때는 다음과 같이 합니다.
f=cell2mat(D(:,1))
f =
1
2
3
4
cell2mat() 함수는 cell class 를 matrix 로 만들어 줍니다.
matrix 를 cell 로 만들어 줄 때는 mat2cell() 이라는 함수를 이용합니다.
A=magic(2)
A =
1 3
4 2
G=mat2cell(A,2,2)
G =
[2x2 double]
celldisp(G)
G{1} =
1 3
4 2
size(G)
ans =
1 1
위 결과를 보면 G 의 크기가 1행 1열이죠? 2 행 2열로 나타내고 싶은데 말이죠..
다음과 같이 하면 원하는 결과를 얻을 수 있습니다.
G2=mat2cell(A,[1 1],[1 1])
G2 =
[1] [3]
[4] [2]
size(G2)
ans =
2 2
숫자만으로 구성된 matrix 를 cell 로 표현 할 때는 num2cell() 함수를 사용하는 게 좀 더 편리 합니다.
G3=num2cell(A)
G3 =
[1] [3]
[4] [2]
size(G3)
ans =
2 2
'programming language > MATLAB' 카테고리의 다른 글
MATLAB NaN (0) | 2011.04.20 |
---|---|
MATLAB 파일 출력 (0) | 2011.04.19 |
MATLAB 파일 읽기 importdata() (0) | 2011.04.18 |
MATLAB binomial r.v. generation (4) | 2011.04.17 |
MATLAB taylor, Maclaurin serise (0) | 2011.04.10 |
MATLAB 그래프에 값 넣기 추가, gtext() (0) | 2011.04.09 |
MATLAB 그래프에 값 넣기 (0) | 2011.04.09 |
MATLAB symbolic math 수식으로 함수 만들기 matlabFunction() (0) | 2011.04.09 |
댓글