파이썬 넘파이(Numpy) 사용법 총정리 : 설치부터 배열 생성 및 정보 확인 방법
파이썬으로 데이터 분석이나 머신러닝 공부를 하게 되면 반드시 만나게 되는 라이브러리가 있습니다. 바로 넘파이(Numpy)입니다. 넘파이는 대규모 수치 데이터를 빠르고 효율적으로 처리할 수 있게 해주는 파이썬의 핵심 도구 중 하나입니다.
이 글에서는 넘파이의 개념과 설치 방법부터 배열 생성, 그리고 배열 정보 확인 방법까지 기본적인 넘파이 사용법을 정리해드리도록 하겠습니다.
01. 넘파이(Numpy)란?
넘파이(Numpy)는 Numerical Python의 약자로 다차원 배열의 연산 처리를 효율적으로 처리할 수 있어 선형대수, 통계 데이터 등에서 자주 사용되는 라이브러리입니다.
1) 넘파이(Numpy) 설치 및 사용법
아나콘다를 사용하시는 분은 아나콘다 설치시 기본적으로 numpy가 설치되어 있으므로, 바로 import 하여 사용하시면 되고, 파이썬만 설치하신 분들은 아래와 같이 pip로 설치 후 사용하시면 됩니다.
- 설치 : pip install numpy (아나콘다에는 기본적으로 설치 되어 있음)
- 사용 : import numpy as np (관례적으로 별칭은 np를 사용함)
2) 넘파이 배열 vs 파이썬 리스트 (Numpy Array vs Python List)
- 넘파이 배열 : 각 데이터 값을 연속된 메모리에 저장하여 사용 (모든 데이터가 같은 자료형이어야 하며, 개수 변경 불가)
- 파이썬 리스트 : 각 데이터의 주소값을 저장하여 사용 (데이터에 접근할 경우 주소값을 가지고 메모리에서 검색하여 사용)
따라서 넘파이의 배열은 파이썬의 리스트에 비해 처리 속도가 빠릅니다. 대량의 데이터를 다룰 때 넘파이는 파이썬의 리스트보다 수십 배 이상의 성능 차이를 보이기도 합니다.
3) N차원 배열(Ndarray)과 용어
Ndarray(N-Dimensional Array)는 N차원의 배열로 아래 그림과 같은 데이터 구조를
가지고 있습니다. 그리고 배열을 표현할 때 사용되는 용어는 다음과
같습니다.
- Axis : 배열의 각 축
- Rank : 축의 개수 (차원의 수)
- Shape : 각 축의 길이 (ex, (2, 3))
- Size : 크기 (ex, 2x3=6)
- Scalar : 숫자
- Vector : 1차원 배열 (Scala의 배열)
- Matrix : 2차원 배열 (Vector의 배열)
- Tensor : 3차원 이상의 배열 (Matrix의 배열)
|
| 넘파이 - N차원 배열 구조 |
02. Numpy 배열 사용법
1) 배열 생성방법
배열(ndarray 클래스 객체)은 Numpy의 array() 함수를 사용하여 만들 수 있습니다. 이때 배열의 데이터 값은 주로 리스트를 사용하여 전달합니다.
- arr = np.array( [1, 2, 3] )
import numpy as np
data = [1, 2, 3] # list
arr = np.array(data) # array
print(data, arr) # [1, 2, 3] [1 2 3]
배열은 한 가지 타입의 데이터만 사용 가능하기 때문에 서로 다른 데이터가 섞여 있으면 더 포괄적인 타입으로 자동 형변환됩니다. dtype 속성을 사용하면 자료형을 직접 지정할 수도 있습니다.
- int, float str : 파이썬 기본 타입
- np.int16, np.float16, np.str_ : Numpy 전용 타입으로 np.int64 등으로 메모리 크기 조정 가능
import numpy as np
# [실행결과] print(a1, a1.dtype)
a1 = np.array([1, 2, 3]) # a1 : [1 2 3] int64
a2 = np.array([1.0, 2, 3]) # a2 : [1. 2. 3.] float64
a3 = np.array(['1.0', 2, 3]) # a3 : ['1.0' '2' '3'] <U21
a4 = np.array([1+2j, 2, 3]) # a4 : [1.+2.j 2.+0.j 3.+0.j] complex128
a7 = np.array([1, 2, 3], dtype=np.int16) # a7 : [1 2 3] int16
a8 = np.array([1, 2, 3], dtype=np.float16) # a8 : [1. 2. 3.] float16
a9 = np.array([1, 2, 3], dtype=np.str_) # a9 : ['1' '2' '3'] <U1
a10 = np.array([1, 2, 3], dtype=int) # a10: [1 2 3] int64
a11 = np.array([1, 2, 3], dtype=float) # a11: [1. 2. 3.] float64
a12 = np.array([1, 2, 3], dtype=str) # a12: ['1' '2' '3'] <U1
2) 배열 정보 확인방법
배열의 자료형 및 크기 등 정보를 확인하려고 할 때는 아래의 속성을 사용하여 확인 할 수 있습니다.
- .dtype : 데이터 자료형 확인 (int64, float 64 등)
- .ndim : 차원의 수 확인 (1차원, 2차원 )
- .shape : 배열의 구조 확인 (행, 열)
- .size : 배열의 전체 요소의 개수 확인
- type( ) : 자료형(타입)을 확인하는 파이썬 내장함수
import numpy as np
data_list = [1, 2, 3]
data_tuple = (1, 2, 3)
data_set = {1, 2, 3}
data_dict = {'a':1, 'b':2, 'c':3 }
a1 = np.array(data_list)
a2 = np.array(data_tuple)
a3 = np.array(data_set)
a4 = np.array(data_dict)
print("a1 : ", a1.ndim, a1.shape, a1.size, a1, type(a1), a1.dtype, type(data_list))
print("a2 : ", a2.ndim, a2.shape, a2.size, a2, type(a2), a2.dtype, type(data_tuple))
print("a3 : ", a3.ndim, a3.shape, a3.size, a3, type(a3), a3.dtype, type(data_set))
print("a4 : ", a4.ndim, a4.shape, a4.size, a4, type(a4), a4.dtype, type(data_dict))
[실행결과]
a1 : 1 (3,) 3 [1 2 3] <class 'numpy.ndarray'> int64 <class 'list'>
a2 : 1 (3,) 3 [1 2 3] <class 'numpy.ndarray'> int64 <class 'tuple'>
a3 : 0 () 1 {1, 2, 3} <class 'numpy.ndarray'> object <class 'set'>
a4 : 0 () 1 {'a': 1, 'b': 2, 'c': 3} <class 'numpy.ndarray'> object <class 'dict'>
3) n차원 배열
n차원 배열의 생성 및 정보 확인 방법입니다.
import numpy as np
a1 = np.array([1,2,3])
a2 = np.array([[1,2,3], [4,5,6]])
a3 = np.array([[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]])
print("a1:", a1, a1.dtype, a1.ndim, a1.shape, a1.size)
print("a2:", a2, a2.dtype, a2.ndim, a2.shape, a2.size)
print("a3:", a3, a3.dtype, a3.ndim, a3.shape, a3.size)
[실행결과]
a1: [ 1 2 3] int64 1 (3,) 3
a2: [[ 1 2 3]
[ 4 5 6]] int64 2 (2, 3) 6
a3: [[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]] int64 3 (2, 2, 3) 12
