본문 바로가기

Programming/Python

[Numpy] ndarray 기본 및 데이터 타입 변환하기

반응형

이번 포스팅에서는 Numpy 의 ndarray 함수에 대해서 간단하게 알아보고자 합니다.

Numpy 란?

NumPy는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬의 라이브러리이다. NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공합니다

 

numpy를 사용을  위해 우선 import 해준 후 np 로 지정합니다.

import numpy as np

 

 

ndarray 란?

ndarray 는 numpy 를 통해 생성되는 n차원 배열 객체 입니다. 

여기서는 간단하게 배열을 생성하고 데이터를 확인해 보는 시간을 갖도록 하겠습니다

.

 배열생성

 

array 함수를 통해 배열을 생성하고 배열의 타입과 형태를 확인해 보며 다음과 같이 1차원 함수가 생성 됩니다. 

#input
array1 = np.array([1,2,3])
print('array1 type :', type(array1))
print('array1 array 형태', array1.shape)
print(array1)

#output
array1 type : <class 'numpy.ndarray'>
array1 array 형태 (3,) #1차원배열
[1 2 3]

 

이번엔 2차원 배열을 생성하고 배열의 데이터 타입과 형태를 확인해 보겠습니다.

아래 코드와 같이 2개의 로우와 3개의 칼럼을 가지는 배열을 하나 생성할 수 있습니다.

#input
array2 = np.array([[1,2,3],
                   [4,5,6]])
print('array2 type :', type(array2))
print('array2 array 형태', array2.shape)
print(array2)

#output
array2 type : <class 'numpy.ndarray'>
array2 array 형태 (2, 3) #2개의 로우와 3개의 칼럼
[[1 2 3]
 [4 5 6]]

 

다음은 [[ ]] 를 이용해 1개의 로우와 3개의 칼럼을 가지는 2차원 배열을 생성해 보겠습니다.

#input
array3 = np.array([[1,2,3]])  # np.array([[1,2,3],])과 동일
print('array3 type :', type(array3))
print('array3 array 형태', array3.shape)
print(array3)

#output
array3 type : <class 'numpy.ndarray'>
array3 array 형태 (1, 3) # 1개의 로우와 3개의 칼럼을 가지는 2차원 배열
[[1 2 3]]

 

위에서 생성한 array1, array1, array3 에 대해 n차원 배열 여부를 아래와 같이 확인 할 수 있습니다. 

#input
print('array1 : {:0}차원, array2 : {:1}차원, array3 : {:2}차원'.format(array1.ndim,array2.ndim,array3.ndim))

#output
array1 : 1차원, array2 : 2차원, array3 :  2차원

 

 

ndarray  데이터 타입

ndarray 는 모두 동일한 데이터 타입을 가지고 있어야 합니다. 그래서 데이터 타입이 섞여 있는 경우에는 더 큰 데이터 타입으로 자동으로 변환 됩니다. 

리스트를 하나생성하고 array 함수를 사용해 보도록 하겠습니다. int형 데이터만 가지고 있으므로 datavalue 값이 int64 로 설정 됩니다.

#input
list1 = [1,2,3]
print('list1 type :',type(list1))
array1 = np.array(list1)
print('array1 Type :',type(array1))
print('array1 : ' , array1)
print('array1 dataValue :', array1.dtype )

#output
list1 type : <class 'list'>
array1 Type : <class 'numpy.ndarray'>
array1 :  [1 2 3]
array1 dataValue : int64

 

하지만 아래와 같이 int 와 문자가 혼용되면 문자열로 변환합니다.

#input
list2 = [1,2,'test']
array2 = np.array(list2)
print('array2 : ' , array2)
print('array2 dataValue :', array2.dtype )

#output
array2 :  ['1' '2' 'test']
array2 dataValue : <U21

 

그럼 int 형과 float 형이 섞여 있으면 어떻게 될까요 ?

아래와 같이 더 큰 형태인 float 형태로 변환되는 것을 보실 수 있습니다. 

#input
list3 = [1,2,3.0]
array3 = np.array(list3)
print('array3 : ', array3)
print('array3 dataValue :', array3.dtype )

#output
array3 :  [1. 2. 3.]
array3 dataValue : float64

 

하지만 대용량 데이터 처리 시 메모리 절약을 위하여 데이터 형 변환을 사용해야 합니다. 
이럴때는  astype() 에 인자로 원하는 타입을 문자열로 지정할 수 있습니다.

아래 소스는 각각 int32 와 float64 로 변환하는 예제입니다.

#input
array3_int = array3.astype('int32')
array3_int

#output
array([1, 2, 3], dtype=int32)
#input
array3_float = array3_int.astype('float64')
array3_float

#output
array([1., 2., 3.])

이렇게 해서 간단하게 배열을 생성하고 데이터 타입을 변환하는 예제에 대해서 살펴 보았습니다. 

다음 포스팅에서는 차원과 크기의 변경, 인덱싱, 정렬 등의 기능에 대해서 추가로 살펴 보도록 하겠습니다. 

 

참고 : github.com/wikibook/pymldg-rev