자급자족하는 블로그

[MATLAB] 변수형(Data type) - 1 본문

MATLAB

[MATLAB] 변수형(Data type) - 1

YPSR 2018. 7. 18. 01:38

본 포스팅에서는 MATLAB의 변수형(data type)에 대해 알아보겠습니다.

(Data type에 관한 포스팅은 두 개로 나뉘어 올라갈 예정입니다; 1: numeric, character, logical, 2: cell, structure, function handles)


본격적으로 시작하기에 앞서, MATLAB 내의 모든 변수는 배열(array)의 형태로 표현됩니다.

선언된 변수가 스칼라(scalar)임은 곧 1 by 1 array임을 의미하며, 벡터(vector)라면 1개의 행(row) 또는 열(column)으로 이루어진 array임을 뜻합니다. 행렬(matrix)로 표현된 변수는 여러 개의 row와 column으로 이루어진 (또는 그 이상의 차원으로 이루어진) array인 것이죠.

간단한 개념이지만 중요한 부분이니 잘 기억해주시기 바랍니다.


Array의 element로 사용될 수 있는 data type에는 총 여섯 가지가 있습니다.


 Numeric

 수를 표현하는 data type. Class에 따라 표현할 수 있는 수의 범위와 정밀도가 달라짐.

 Character

 문자를 표현하는 data type. 2 byte의 memory를 사용함.

 Logical

 참(true) 또는 거짓(false)의 정보를 저장하는 data type. 1 byte의 memory를 사용함.

 Cell

 Data type, data size에 무관하게 matrix의 형태로 변수를 저장하는 data type.

 (array는 동일한 data type의 변수만을 저장할 수 있음)

 Structure

 다양한 변수를 하나로 묶기 위한 data type.

 Function handles

 함수마다 부여된 고유 번호를 표현.

Table 1. Data types of MATLAB


각 data type은 저마다 역할이 다르며, 선언시 Workspace window에 표현되는 아이콘도 다릅니다.


Fig 1. Different icon for each data type


앞서 말씀드렸듯이, 이번 포스팅에서는 위 여섯 가지 data type 중 numeric, character, logical data type에 관하여 소개드리겠습니다.



1. Numeric data type


Table 1에 소개돼있듯이, numeric data type은 수를 표현하는 data type입니다.

다른 data type과 다르게, numeric data type에는 여러 class가 존재하며, 그에 따라 표현할 수 있는 숫자의 범위 또는 정밀도가 결정됩니다.


 int8 

 8-bit signed integer

 -2^7 to 2^7-1

 int16

 16-bit signed integer

 -2^15 to 2^15-1

 int32

 32-bit signed integer

 -2^31 to 2^31-1

 int64

 64-bit signed integer

 -2^63 to 2^63-1

 uint8

 8-bit unsigned integer

 0 to 2^8-1

 uint16

 16-bit unsigned integer

 0 to 2^16-1

 uint32

 32-bit unsigned integer

 0 to 2^32-1

 uint64

 64-bit unsigned integer

 0 to 2^64-1

 single

 32-bit floating-point number

 -2^128 to -2^(-126) or 2^(-126) to 2^128

 double

 64-bit floating-point number

 -2^1023 to -2^(-1022) or 2^(-1022) to 2^1023

Table 2. Classes for numeric data type


Signed의 의미는 부호를 표현할 수 있다는 의미입니다. 부호를 표현하는 class의 경우 할당된 memory 중 1 bit를 부호 표현에 사용하기 때문에, (총 bit수 - 1)만큼의 bit만으로 숫자를 표현할 수 있습니다.

Unsigned class의 경우에는 부호에 할당되는 bit가 없으므로, 같은 memory를 차지하더라도 int형 class보다 더 높은 수를 표현할 수 있습니다. 단, 음의 정수는 표현할 수 없겠죠.


중요한 것은 single과 double입니다. 이들은 부동소수점(floating-point)으로 수를 표현하는 class입니다.

Floating-point number의 경우, 할당된 memory를 세 파트로 나누어 수를 표현합니다(부호, 지수, 가수).

(Floating-point number에 관한 자세한 설명은 https://en.wikipedia.org/wiki/Floating-point_arithmetic 참고)


Fig 2. Floating-point number for binary system


single과 double 모두 부호에는 1 bit를 사용합니다; 양수:0, 음수:1.

지수 표현의 경우 single은 8 bit, double은 11 bit를 사용하며, 각각 -126부터 127까지(single) 또는 -1022부터 1023까지(double) 표현이 가능합니다. Fig 2의 지수부(n)를 결정하는 데에 사용됩니다.

(bit 수에 비해 표현 가능한 수가 2-3개 적은 것은 Inf 또는 NaN을 표현하기 위함임. 구체적인 내용은 https://en.wikipedia.org/wiki/IEEE_754-1985#Positive_and_negative_infinity 참고)

가수의 경우에 single은 23 bit, double은 52 bit를 사용합니다. Fig 2의 가수부(1.f) 중 소숫점 이하(f)를 표현하는 데에 사용됩니다.


Fig 3. Memory usage of single class(top) and double(bottom)


single보다 double class의 지수 표현에 할당된 memory가 더 크기 때문에, double이 더 넓은 범위의 수를 표현할 수 있습니다.

마찬가지로 가수부를 위한 memory 또한 double이 더 크기 때문에 더욱 정밀한 표현이 가능합니다.

MATLAB의 경우, 기본적으로 모든 numeric data type의 class는 double입니다.



2. Character


Data type의 이름에서 짐작할 수 있듯이, 문자를 선언/저장하기 위한 data type입니다.

2 byte의 memory를 사용하여 표현할 수 있는 각 숫자마다 상징하는 문자가 약속되어 있죠.

(https://en.wikipedia.org/wiki/Unicode 참고)


Character형 변수를 선언하기 위해서는 assign하고자 하는 문자에 반드시 작은 따옴표를 사용해야 합니다.

그렇지 않으면 해당 문자를 변수명 또는 함수명으로 인식하여, 잘못된 값이 assign되거나 선언되지 않은 변수 또는 함수라는 에러가 발생합니다.


Fig 4. Examples for well-assigned case and wrong cases


Character형 변수가 vector를 이룬다면 이는 곧 문자열(string)이 될 것입니다.


Fig 5. String is a vector of character data


3. Logical


Logical data type은 논리값을 저장하는 data type으로써, 주어진 논리 연산이 true일 경우 1, false일 경우 0이 assign됩니다.

이유는 잘 모르겠지만 MATLAB에서 logical data type에는 1 byte의 memory가 할당됩니다.


나중에 소개드리겠지만, 선언된 변수 또는 값들을 다른 data type으로 표현할 수 있습니다.

Numeric data 또한 logical data로 표현할 수 있다는 뜻인데요, 굳이 1이 아니더라도 0이 아닌 numeric data를 logical type으로 변환하면 true로 인식하여, 1이 assign됩니다. 오로지 0만이 false로 인식되고, 그외의 값은 모두 true로 인식한다는 것이죠.


Fig 6. All value except zero means logical true




오늘의 포스팅은 여기서 마치겠습니다.

다음 포스팅에서는 cell, structure, function handles type 소개와 함께, data type에 관한 command 몇가지를 알려드리도록 하겠습니다.

감사합니다.







Comments