데이터는 숫자들의 배열로 이루어져 있습니다. 예를 들면, 이미지는 2차원 배열 데이터로 구성됩니다. 즉, 숫자 배열로 된 데이터를 처리하는 절차는 데이터 과학의 가장 기본이 됩니다. 오늘은 배열 데이터를 다룰 수 있는 파이썬 라이브러리인 넘파이(Numpy)의 개념과 기본 배열 생성에 대해 알아보겠습니다.
넘파이(Numpy)
n차원 배열 생성
shape 확인하기
ndim 확인하기
size 확인하기
dtype
넘파이는 Python에서 벡터와 행렬처럼 '수치연산'에 특화되어있는 라이브러리입니다. 선형대수와 매우 밀접한 연관이 있습니다. 내부적으로는 C로 구현되어있으며, 대규모 연산을 매우 빠른 속도로 수행합니다.
n차원 배열에 대한 기본 개념입니다.
처음 배열부터 차례대로 1차원, 2차원, 3차원 배열이라고 부르며
1차원 배열 - axis(축) : 0으로 구성 / Vector라고 부름
2차원 배열 - axis(축) : 0, 1로 구성 / Matrix라고 부름(행렬)
3차원 배열 - axis(축) : 0, 1, 2로 구성 / Tensor라고 부름
import numpy as np
넘파이(numpy)를 사용하기 위해선, 우선 넘파이 라이브러리를 설치해야합니다.
설치되어 있다고 가정하고 넘파이를 사용하기 위해 import 해봅시다.
#1차원 배열
arr = np.array([1, 2, 3])
print(arr)
>> [1 2 3]
print(type(arr))
>> <class 'numpy.ndarray'>
넘파이 배열을 만들 때는 np.array()라는 메서드를 사용합니다. np.array() 메서드는 파이썬의 리스트를 인수로 받아 넘파이 라이브러리가 제공하는 특수한 형태의 배열(numpy.ndarray)을 반환합니다. type()함수를 통해 np.array() 메서드를 이용해 만든 배열의 타입을 확인해봅시다. 타입이 'numpy.ndarray'로 찍히는 것을 확인할 수 있습니다.
#2차원 배열
arr = np.array([[1, 2, 3],
[4, 5, 6]])
print(arr)
>> [[1 2 3]
[4 5 6]]
np.array()메서드를 활용하여 2차원 배열을 만들어 보았습니다.
#튜플로 1차원 배열 만들기
tpl = (4, 5, 6)
arr = np.array(tpl)
print(arr)
>> [4 5 6]
#리스트로 2차원 배열 만들기
lst = [[1, 2, 3], [4, 5, 6]]
arr = np.array(lst)
print(arr)
>> [[1 2 3]
[4 5 6]]
이처럼 np.array() 메서드는 리스트는 물론, 튜플로도 N차원 배열을 만들 수 있습니다.
shape으로 배열의 형상을 알 수 있습니다. 형상이란 N차원 배열에서 그 배열의 '각 차원의 크기(원소 수)'를 배열의 형상이라고 합니다.
#형상(shape) 확인하기
arr = np.array([1, 2, 3]) #1차원 배열
print(arr.shape)
>> (3,)
arr2 = np.array([[1, 2, 3],[4, 5, 6]]) #2차원 배열
print(arr2.shape)
>> (2, 3)
확인하고 싶은 배열에 .shape을 더하면 해당 배열의 형상을 확인할 수 있습니다. 1차원 배열에서 (m, )은 m칸으로 구성된 1차원 배열이라는 의미입니다. 2차원 배열에서의 (m, n)는 m행 n열로 구성된 2차원 배열을 의미합니다. 3차원 배열에서 shape을 구하면 (층, 행, 열) 총 3가지 정보를 얻을 수 있습니다.
ndim은 해당 배열의 차원을, size는 해당 배열의 칸 수를 알 수 있습니다.
arr = np.array([1, 2, 3]) #1차원 배열 생성
print(arr.ndim) #해당 배열의 차원 확인하기
>> 1
print(arr.size) #해당 배열의 칸 수 확인하기
>> 3
arr2 = np.array([[1, 2, 3],[4, 5, 6]])
print(arr2.ndim) #해당 배열의 차원 확인하기
>> 2
print(arr2.size) #해당 배열의 칸 수 확인하기
>> 6
dtype은 배열의 데이터 타입을 의미합니다. 어떠한 배열의 데이터 타입을 확인할때 사용하거나, 배열의 데이터 타입을 직접 지정해줄때 사용할 수 있습니다.
arr = np.array([1.1, 2.2, 3.3])
print(arr.dtype)
>> float64
arr = np.array([1.1, 2.2, 3.3], dtype=int)
print(arr)
>> [1 2 3]
print(arr.dtype)
>> int32
상단의 예제는 dtpye으로 해당 배열의 데이터 타입을 확인하고(float64), 해당 배열의 데이터 타입을 int로 바꾸어 주는 예제입니다. dtype=int를 적용하여 배열을 출력해보면 float였던 데이터 타입이 정수로 바뀐 것을 확인할 수 있습니다.
arr = np.array([1, 2, 3, 0], dtype=bool)
print(arr)
>> [True True True False]
dtype을 이용하면 배열의 타입을 int, float는 물론 bool과 string으로도 바꾸어 줄 수 있습니다. 하지만 문자열이 들어있는 배열에서의 데이터 타입을 int로 바꾸는 등의 형변환은 할 수 없습니다.