Numpy 란 ?
Numpy란?
Numpy는 다차원 배열을 쉽게 처리하고 효율적으로 사용할 수 있도록지원하는 파이썬의 패키지입니다. NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공합니다. 데이터 분석을 할때, Pandas와 함께 자주 사용하는 도구로 등장합니다.
왜 Numpy를 사용할까
데이터란 이미지, 오디오, 텍스트, 숫자 등 다양한 형태와 크기로 존재합니다. 사람은 이런 데이터들을 가지고 이해하지만 컴퓨터는 0 또는 1만 이해합니다. 여기서 핵심은 데이터를 숫자의 배열로 볼 수 있습니다. 실제로 데이터 분석을 수행하기 위한 전제 조건은 컴퓨터가 이해할 수 있도록 데이터를 숫자 형식으로 변환하는 것입니다. 여기서 효율적으로 배열을 저장 및 조작할 수 있어야 하는데 이러한 요구사항으로 Numpy 패키지가 나오게 됩니다. 파이썬의 내장 기능인 리스트 또한 Numpy 배열과 동일한 기능을 제공할 수 있기 때문에 왜 Numpy를 사용해야 하는지 의문이 듭니다. 배열의 크기가 작으면 문제가 되지 않지만 Numpy 배열은 데이터의 크기가 커질수록 저장 및 가공을 하는데 효율성을 보장합니다. 이러한 장점으로 파이썬의 Numpy 패키지는 Data Science에 핵심적인 도구로 인식이 되고 있습니다.
설치
아래의 명령어로 numpy 패키지를 쉽게 설치할 수 있습니다.
$ pip install numpy
배열 선언
numpy에 배열을 넘겨 numpy 타입으로 생성할 수 있습니다.
import numpy as np
arr1 = np.array(\[1, 2, 3, 4\])
print(arr1)
print(type(arr1))
$ \[1 2 3 4\]
$ <class 'numpy.ndarray'>
array 메소드에 dtype 키워드로 타입을 지정하여 어레이의 값들에 타입을 지정할 수 있습니다.
- 해당 키워드는 float, int, bool, str,object 등을 줄 수 있습니다.
arr2 = np.array(\[1, 2, 3, 4\], dtype='float32')
print(type(arr2))
print(arr2)
$ <class 'numpy.ndarray'>
$ \[1. 2. 3. 4.\]
또한 1차원 배열 이상을 선언할 수 있습니다.
lists = \[\[0,1,2\], \[3,4,5\], \[6,7,8\]\]
arr2d = np.array(lists)
print(arr2d)
$ \[\[0 1 2\]
$ \[3 4 5\]
$ \[6 7 8\]\]
다중 배열에서 특정 값을 호출할 때, list와 다르게 콤마로 구분지어 사용합니다.
x2 = np.array(\[\[3, 2, 5, 5\],\[0, 1, 5, 8\], \[3, 0, 5, 0\]\])
print(x2\[0,3\])
$ 5
그리고 파이썬의 내장 기능인 리스트와 다르게 Numpy는 아래와 같은 기능을 제공합니다.
\-- 내장 기능 list는 아래와 같이 동작한다.
list1 = \[1,2,3,4\]
print(list1 \* 2)
print(list1 + 2)
print(list1 \* list1)
$ \[1, 2, 3, 4, 1, 2, 3, 4\]
$ 오류 발생
$ 오류 발생
아래는 파이썬의 내장기능 list와 비교하여 Numpy만의 기능 및 장점입니다.
1. Numpy의 배열은 생성 이후 크기를 변경할 수 없음. 만약 변경해야 하는 사항이 있을 시, 새로 생성해야 함
2. list와 다르게 Numpy 배열의 모든 값의 타입은 dtype으로 같음
3. list보다 메모리 공간을 덜 차지함
배열에서 제공하는 속성은 다음과 같습니다.
x = np.random.randint(0, 10, (3, 3))
print("ndim: ", x.ndim)
print("shape:", x.shape)
print("x size: ", x.size)
print("dtype:", x.dtype)
print("itemsize:", x.itemsize, "bytes")
print("nbytes:", x.nbytes, "bytes")
$ ndim: 2
$ shape: (3, 3)
$ x size: 9
$ dtype: int64
$ itemsize: 8 bytes
$ nbytes: 72 bytes