serendipity
Numpy 넘파이 본문
Numpy란?
: 다차원 배열을 쉽게 처리하고 효율적으로 사용할 수 있도록 지원하는 파이썬의 패키지 (Numerical Python의 약자)
사용 배경
데이터란 이미지, 오디오 텍스트, 숫자 등 다양한 크기와 형태로 존재합니다. 사람은 이런 데이터들을 가지고 이해하지만 컴퓨터는 0 또는 1만 이해합니다. 여기서 중요한 것은, 데이터를 숫자의 배열로 볼 수 있습니다. 실제로 데이터 분석을 수행하기 위한 전제 조건은 컴퓨터가 이해할 수 있도록 데이터를 숫자 형식으로 변환하는 것입니다. 이를 효율적으로 배열을 저장 및 조작할 수 있어야 해서 Numpy 패키지가 나오게 되었습니다. 파이썬의 내장 기능인 리스트 또한 Numpy 배열과 동일한 기능을 제공할 수 있기 때문에 왜 이걸 써야하지? 라는 의문을 가질 수 있는데요. 배열의 크기가 작으면 문제가 되지 않지만 Numpy 배열은 데이터 크기가 커질수록 저장,가공을 하는데 효율성을 보장합니다. 이러한 점 덕분에 Numpy 패키지는 데이터분석에 있어 핵심 도구로 인식되고 있습니다.
* 파이썬의 내장기능인 List와 비교하여 Numpy만의 기능 및 장점
List와 다르게 Numpy 배열의 모든 값의 타입은 dtype으로 동일
List에 비해 빠르고 메모리를 효율적으로 사용
Numpy 배열은 생성 이후 크기를 변경하지 못함 (변경해야할 시, 새로 생성)
Numpy 사용
import numpy as np
NumPy의 핵심은 ndarray 클래스, 이는 다차원 행렬 자료 구조를 지원합니다.
import numpy as np
a = np.array([0,1,2,3,4,5,6,7,8,9])
>>> type(a) # 출력 : <class 'numpy.ndarray'>
np.array(리스트 구조) 함수 를 사용하면 다차원 행렬을 생성할 수 있습니다.
# 2 X 3 array
b = np.array([[1,2,3],[4,5,6]])
b # 출력 : array([[1, 2, 3],[4, 5, 6]])
# 2 X 2 X 3 array
c = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
c # 출력 : array([[[ 1, 2, 3],[ 4, 5, 6]],[[ 7, 8, 9], [10, 11, 12]]])
행렬의 차원 및 크기는 ndim속성과 shape속성으로 알 수 있습니다.
a = np.array([1,2,3])
>>> a.ndim # 출력 : 1
>>> a.shape # 출력 : (3,) > 행이 하나밖에 없어서 3개의 열이 있다는 것을 보여줌
다차원 행렬의 인덱싱(Indexing)과 슬라이싱(Slicing)은 다음과 같이 할 수 있습니다.
c
array([[[ 1, 2, 3],[ 4, 5, 6]],[[ 7, 8, 9],[10, 11, 12]]])
>>> c[0,0,:] # 첫번째 tesnor, 첫번째 row, column 전체
array([1, 2, 3])
>>> c[0,0,1:] # 첫번째 tesnor, 첫번째 row, 두번째 column부터 마지막까지.
array([2, 3])
데이터의 타입은 다음과 같이 변경할 수 있습니다.
x = np.array([[1,2].[3,4]], dtype=np.float64) #dtype = np.데이터타입 변경 가능
y = np.arange(5,9).reshape(2,2) #reshape 배열 형태 변경
z = np.astype(np.float64) #astype으로 데이터 타입 변경
- 전치연산 (transpose) : 행과 열을 바꾼다.
A = np.array([[1,2,3],[4,5,6]])
print(A) # [[1 2 3] [4 5 6]]
print(A.T) # [[1 4] [2 5] [3 6]]
배열의 연산을 다음과 같이 진행할 수 있습니다.
print(np.add(x,y))
# = print(x+y)
print(np.multiply(x,y))
# = print(x * y)
행렬 곱셈은 numpy. dot으로 할 수 있습니다. (두 벡터(vector)의 내적, 내적곱, 점곱 등을 계산하는 함수입니다.)
x = np.array([[1,2], [3,4]])
y = np.arrange(5.9).reshape(2,2) #[5,6][7,8]
v = np.array([9,10])
w = np.array([11,12])
>> print(v.dot(w)) # 9*11 + 10*12 =219
>> print(np.dot(v,w)) #219
>> print(x.dot(v)) #1*9+10*2, 9*3+10*4 = [29 67] [29 67]
>> print(np.dot(x,v)) # [29 67] [29 67]
>> print(np.dot(x,y)) # [[19 22] [43 50]]
배열의 결합 (concatenate) & 배열 쪼개기 (split) 은 다음과 같이 할 수 있습니다.
x = np.array([1,2,3])
y = np.array([4,5,6])
m = np.concatenate([x,y])
print(m) #[1 2 3 4 5 6]
a, b = np.slit(m, 2)
print(a, b) #[1 2 3] [4 5 6]
'Study > Big Data' 카테고리의 다른 글
Hadoop 하둡 (0) | 2021.08.24 |
---|---|
Matplotlib (0) | 2021.07.10 |
Pandas 판다스 (0) | 2021.07.10 |
구글 고급 애널리틱스 (0) | 2021.07.08 |
구글 초보 애널리틱스 (0) | 2021.07.08 |