SJ_Koding

Numpy 배열 형태 변경(reshape)과 데이터 유형 변경 (dtype, astype) 본문

Data analysis/Numpy

Numpy 배열 형태 변경(reshape)과 데이터 유형 변경 (dtype, astype)

성지코딩 2021. 12. 31. 02:27

안녕하세요! 성지코딩입니다. 이번 게시글은 Numpy의 배열 형태 변경데이터 유형 변경에 대해 알아봅니다.

Numpy 배열 형태 변경


Numpy Array의 가장 큰 장점은 형태(shape)를 자유자재로 변경이 가능합니다.

    - 단, 변경 전 데이터 개수와 변경 후 데이터의 개수(size)는 같아야 합니다.

 

Numpy Array의 형태를 바꾸기 위해서는 reshape 함수를 이용합니다.

   

reshape에서 (-1, x)의 형태를 사용할 수 있습니다.

-1은 딱 한 번만 사용할 수 있으며 자동으로 적절한 형태를 계산합니다. 
단, (-1자리의 들어올 값) * x 가 원소의 개수와 동일해야만 사용이 가능합니다.

예를 들어 (18, ) 사이즈의 numpy변수 num이 있다고 할 때
     ex) num.reshape(-1, 6) 에서 -1 자리에는 자동으로 3으로 들어가게 됩니다.

 

 

ex) (9, ) shape를 (3, 3) shape로 변경 한다면 다음과 같이 변경됩니다.

 

before (9, )

1 2 3 4 5 6 7 8 9

 

after (3, 3)

1 2 3
4 5 6
7 8 9

번외: shape이 (3, ) 이나 (15, )등과 같이 표현되는 경우는 1차원 벡터를 의미합니다. (3, )은 원소가 3개인 벡터를 의미합니다.

벡터는 1차원, 행렬은 2차원 이상이라고 간단하게 생각하셔도 됩니다!

 

 

코드로 살펴보기

Numpy 배열 형태 변경

array = np.arange(16)
array, array.shape

(array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),

(16, )

 

array.reshape(4, 4), array.reshape(4, 4).shape

(array[ [ 0, 1, 2, 3],
            [ 4, 5, 6, 7],
            [ 8, 9,10,11],
            [12,13,14,15]]),
(4, 4))

 

앞서, reshape에서 -1을 넣게 되면 자동으로 shape을 계산을 하여 값이 넣어지게 된다고 설명했습니다.

예를 들어 (16 ,)크기의 데이터가 있을 때 (-1, 8)을 해준다면 -1에는 어떤 값이 들어갈까요?

네, 2가 들어가게 됩니다. -1자리를 k라고 할 때, k * 8 == 16 가 되어야 하기 때문입니다.

(reshape는 전, 후의 사이즈가 동일해야합니다.)

 

array.reshape(-1, 8), array.reshape(-1, 8).shape

(array([[ 0, 1, 2, 3, 4, 5, 6, 7],

             [ 8, 9,10,11,12,13,14,15]]),

(2, 8))

 

Numpy 데이터 유형 변경


Numpy Array는 모든 요소가 동일한 자료형을 가집니다.

Array를 생성시 dtype을 생략하는 경우, 자동으로 데이터 타입을 결정합니다.

x = np.array([[1, 2], [3, 4]])
x, xdtype

(array([[1., 2.],

             [3., 4.]]),

dtype('float64'))

 

 

혹은, 이미 만들어진 배열의 데이터 유형을 변경하기 위해서는 astype 함수 또는 특정 데이터 유형의 이름을 가진 함수를 사용합니다.

x.astype(np.int32)

array([[1, 2],

           [3, 4]]

 

np.int32(x)

array([[1, 2],

           [3, 4]]

 

x.astype('int')

array([[1, 2],

           [3, 4]]

 

 

 

다음 시간에는 Numpy의 꽃이라고 할 수 있는 Numpy 연산입니다. 특히 정말 중요한 Broadcast(Element WIse)에 대해 자세히 다룹니다. 감사합니다.

 

-sjkoding-