2020-04-02 22:51:18

넘파이 패키지를 사용해서 파이썬 코딩을 하다보면 float32, float64, int8, int16, uint8, bool과 같은 것을 보게 됩니다. 오늘은 이것들이 무엇을 의미하는지 정리하도록 하겠습니다. 

 

우선 int는 정수형, uint는 부호가 없는 정수형, float는 부동소수형을 의미합니다. 그리고 뒤에 붙는 숫자는 값을 저장하는데 사용되는 비트수를 의미합니다. 클수록 더 넓은 범위의 숫자를 담을 수 있습니다. 다루는 숫자의 크기를 고려해서 적절한 자료형을 선택해주면 됩니다. 

 

numpy 자료형 정리

정수형 자료형

int8 => 1비트당 2개의 숫자를 표현할 수 있으므로 8비트면 2^8 = 256개의 정수를 표현할 수 있습니다. 즉 -128에서 127까지 표현가능합니다.

int16 => 2^16개의 정수표현 가능. -32,768에서 32,767까지.

int32 => 2^32개의 정수표현 가능. -2,147,483,648에서 2,147,483,647까지. 

int64 => 2^64개의 정수표현 가능. -9,223,372,036,854,775,808에서 9,223,372,036,854,775,807까지

 

부호없는 정수형 자료형

uint8 => 2^8개의 부호없는 정수표현 가능. 0에서 255까지. 그레이스케일 또는 3채널 컬러 이미지를 담을 때 많이 사용됩니다. 

uint16 => 2^16개의 부호없는 정수표현 가능. 0에서 65,535까지. 

uint32 => 2^32개의 부호없는 정수표현 가능. 0에서 4,294,967,295까지.

uint64 => 2^64개의 부호없는 정수표현 가능. 0에서 18,446,744,073,709,551,615까지.

 

부동소수형(실수형) 자료형

float16 => 1비트는 부호에, 5비트는 정수부분을 나타내는데, 10비트는 소수부분을 나타내는데 사용됩니다. 이에 대한 자세한 내용은 https://en.wikipedia.org/wiki/Single-precision_floating-point_format를 참고해주세요.^^

float32 => 1비트 부호, 8비트 정수, 23비트 소수.

float64 => 1비트 부호, 11비트 정수, 52비트 소수. 

 

논리형 자료형

bool => 참(True)과 거짓(False)을 표현하기 위한 자료형입니다. 

 

 

 

자료형 선정의 중요성

적절한 자료형을 선택해주는 것이 왜 중요한가에 대한 예제를 하나 다루도록 하겠습니다. 위에서 보신 것처럼 uint8은 0-255의 정수를 표현할 수 있는 자료형입니다. 만약에 uint8형 변수에 300을 넣어준다면 어떻게 될까요? 아래 예제를 함께 보시죠. 

 

코드>>

 

 

 

실행결과>>

 

 

 

200은 문제없이 uint8이 표현해낼 수 있지만, 300은 감당할 수가 없습니다. 엉뚱한 숫자인 44가 b에 할당된 것을 보실 수 있습니다. 따라서 자료형 선정은 항상 신경을 써야하는 부분입니다. 잘못하면 의미있는 숫자들을 날려버릴 수도 있고, 아니면 완전 엉뚱한 결과가 할당되어 있을 수도 있기 때문입니다. 오늘은 여기까지..

 

참고자료

[1] https://docs.scipy.org/doc/numpy-1.13.0/user/basics.types.html, SciPy.org, "Data types"