studying data

문제의 본질을 꿰뚫어 해결책을 찾는 법을 공부합니다

콤퓨타 공부/Python

[python 공부] 배열의 데이터 타입 dtype

study_data 2021. 8. 22. 20:36

array는 파이썬 리스트와 달리 같은 단일 데이터 타입만 저장이 가능합니다. 파이썬 리스트의 경우는 [1,14, Tme, "S"] 등 다양한 형태의 데이터가 들어갈 수 있습니다. 그런데 numpy에서는 여러 데이터를 함께 쓸 수 없고, 하나의 형식만 저장할 수 있습니다. 

arr = np.array([0, 1, 2, 3, 4], dtype= float)
print(arr)                   #[0. 1. 2. 3. 4.]
print(arr.dtype)             #'float64'
print(arr.astype(int))       #[0 1 2 3 4]

float는 실수형을 뜻하는데 정수형이 아니라 실수의 형태로 0.0 , 1.0의 형태로 나타납니다. 다른 데이터 타입으로 바꾸기 위해서는 'astype'을 쓸 수 있습니다. 맨 아래 줄 처럼 정수형으로 바뀌게 되는 것이죠. dtype에는 4가지 형식으로 나눌 수 있는데 아래 표와 같습니다.

dtype 설명 다양한 표현
int 정수형 타입 i, int_, int32, int64, i8
float 실수형 타입 f, float_, float32, float64, f8
str 문자열 타입 str, U, U32
bool 부울 타입 (참거짓 판별) ?, bool_

ndarray의 차원 관련 속성은 ndim과 shape으로 나뉘는데 ndim은 ntdimension으로 n차원을 의미합니다. 그리고 shape은 형태를 의미하죠. 행의 갯수에 따라 차원수를 나눌 수 있습니다. 아래 코드의 경우 4개의 값이 하나의 행에 나타나기 때문에 4와 공란으로 결과가 출력됩니다.

list = [0, 1, 2, 3]
arr = np.array(list)
print(arr.ndim)         # 1     --1차원
print(arr.shape)        # (4,)  --4개의 값이 하나의 열에 나타남
list = [[0,1,2],[3,4,5]]
arr = np.array(list)
print(arr.ndim)          #2 --2차원(2개의 행이 존재함)
print(arr.shape)         #(2,3) -- 2개의 행이 3개의 열로 존재함

저는 처음에 arr.shape이 이해하기 어려웠어요. 왜 2개의 행이 3개의 열일까 생각해보니 지금 list안에 list가 또 있는 셈이고 그걸 그림으로 표현하자면 아래와 같은 모양인 것이죠.

0 1 2

3 4 5

그래서 이런 모양이 생기기 때문에 2개의 행과 3개의 열이 생긴다는 것을 알 수 있었습니다. 그리고 ndarray는 크기 속성과 shape조절도 가능합니다. arr.shape에 3, 2를 할당한다면 3행 2열의 모양을 가진 array가 형성되는 것이므로 배열의 길이는 3이 되고 배열 요소의 수는 6으로 반환됩니다.

arr = np.array([0,1,2,3,4,5])
print("arr.shape : {}".format(arr.shape))
print("배열 요소의 수 : {}".format(arr.size))  # size는 배열안에 들어가는 배열 요소의 갯수: 6
print("배열의 길이 : {}".format(len(arr)))     # 배열의 길이는 세로의 행이라고 보면 됨: 1