본문 바로가기
인공지능/데이터

Numpy, 이것만은 알고가자

by EXUPERY 2021. 1. 26.
반응형

 

파이썬의 강력한 도구, Numpy

 


 

 

앞서 Pandas에대해 포스팅했었는데요, Numpy가 그 Pandas의 모태가 됩니다. Numpy를 기반으로 확장시킨 것이 Pandas입니다. Numpy는 여러가지 기능을 제공하는 라이브러리입니다. Array, Tensor, Matrix 등의 수치연산에 필수적이며, 내부적으로 C로 구형되어있어 연산이 굉장히 빠릅니다. (파이썬은 구조적으로 C보다 느립니다. 이 부분에 대해선 나중에 자세히 포스팅하겠습니다.)

 

1. ndarray

import numpy as np
np.array([3,2,1,4], int) #1차원 out>> array([3, 2, 1, 4])
np.array([[3,2],[1,4]]) #2차원 out>> array([[3, 2],
                                            [1, 4]])

넘파이에서 배열을 ndarray라고 부릅니다. 그리고 이런 속성들을 갖고있습니다.

np.array([3,2,4,5,6,1,2,3,4]).shape # tensor out>> (9,)
np.array([[3,2,4],[5,6,1],[2,3,4]]).shape # matrix out>> (3, 3)
np.array([[3,2,4],[5,6,1],[2,3,4]]).ndim # dimension out>> 2
np.array([[3,2,4],[5,6,1],[2,3,4]]).dtype # dtype out>> dtype('int64')
np.array([[3,2,4],[5,6,1],[2,3,4]]).size # 요수갯수 out>> 9

주의할 점은, tensor와 matrix가 개념부터 전혀 다르다는 점입니다. tensor는 컴마뒤에 아무것도 오지 않습니다.

 

 

2. Reshape

a = np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3) # out>> array([[1, 2, 3],
                                               #           [4, 5, 6],
                                               #           [7, 8, 9]])
a.flatten() # out >> array([1, 2, 3, 4, 5, 6, 7, 8, 9])

reshape로 shape를 간단히 지정할 수 있고, flatten으로 펼칠 수도 있습니다.

 

 

 

3. Indexing & Sclicing

a = np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3)
a[0] # out >> array([1, 2, 3])
a[0][0] # out >> 1
a[0,0] # out >> 1
a = np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3)
a[1:] # out >> array([[4, 5, 6],
                  #   [7, 8, 9]])
a[1,1:] # out >> array([5, 6])
a[:,-1] # out >> array([3, 6, 9]) # -1은 역순

 

 

4.Creation

np.arrange(30) # 배열 30까지 만들어준다
np.arrange(0,30,2) # 0 부터 30까지 2의간격으로
np.arrange(12).reshape(3,4) # 보통 이런식으로 많이쓴다
np.zeros(shape=(2,2)) # 2,2 0매트릭스
np.zeros(shape=(4,)) # 4 영벡터
np.ones(shape=(2,2)) # 2,2 1매트릭스
np.ones(shape=(4,)) # 4 1벡터
np.empty(shape=(2,2)) # 2,2 빈 매트릭스
np.empty(shape=(4,)) # 4 빈 벡터
np.identity(3) #단위행렬
np.eye(N=3, M=5) # 대각행렬
np.eye(3,5,k=2) # 대각행렬 (k로 위치지정)
np.eye(matrix, k=1) # 대각 행렬의 값을 추출, k로 첫행 위치지정
np.random.uniform(0,1,10).reshape(2,5) # 균등분포
np.random.normal(0,1,10).reshape(2,5) # 정규분포

 

 

5.Operation

x = np.arange(1,10).reshape(3,3)
x.sum(axis=0)
x.mean(axis=0)
x.std(axis=0)
np.sqrt(x)
a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
np.vstack((a,b)) # 세로로 붙임
np.hstack((a,b)) # 가로로 붙임
np.concatenate((a,b),axis=0) # concat
a.tolist( ) # list로 반환

 

 

6. Comparisons

a = np.arange(10)
a>5 # out >> array([False, False, False, False, False, False,  True,  True,  True,  True], dtype=bool)
np.any(a>5) # out >> True
np.all(a>5) # out >> False
a = np.array([2, 4, 1])
b = np.array([6, 3, 2])
a > b # out >> array([False,  True, False], dtype=bool)
a == b # out >> array([False, False, False], dtype=bool)
(a>b).any() # out >> True
a = np.array([1, 3, 0])
np.logical_and(a > 0, a < 3) # out >> array([ True, False, False], dtype=bool)
np.logical_not(a<3) # out >> array([False,  True, False])
a = np.arange(5)
np.where(a>2) # out >> a = np.arange(10)
a= np.arange(3)
np.argmax(a) # out >> 2
np.argmin(a) # out >> 0

x = np.arange(9).reshape(3,3)
np.argmax(x, axis = 1) # out >> array([2, 2, 2])
np.argmin(x, axis = 1) # out >> array([0, 0, 0])

 

 

7. Array operati

x = np.arange(4)
x + x # out >> array([0, 2, 4, 6])
x - x # out >> array([0, 0, 0, 0])
x * x # out >> array([0, 1, 4, 9])
x + 3 # out >> array([3, 4, 5, 6])
x * 3 # out >> array([0, 3, 6, 9])
x / 3 # out >> array([0., 0.33333333, 0.66666667, 1.])

 

 

8. Bool & Fancy

A = np.arange(5*5).reshape(5,5)
B = A % 2
B.astype(np.int)
# out >> 
array([[0, 1, 0, 1, 0],
       [1, 0, 1, 0, 1],
       [0, 1, 0, 1, 0],
       [1, 0, 1, 0, 1],
       [0, 1, 0, 1, 0]])
x = np.array([1,2,3,4,5])
x[x>2] # out

 

 

참고자료

 

NumPy Reference — NumPy v1.19 Manual

 

numpy.org

 

 

TEAMLAB-Lecture/AI-python-connect

Contribute to TEAMLAB-Lecture/AI-python-connect development by creating an account on GitHub.

github.com

 

반응형

'인공지능 > 데이터' 카테고리의 다른 글

SQL Basic  (0) 2021.03.07
스케일링을 하는 8가지 방법  (0) 2021.02.03
인코딩을 하는 5가지 방법  (0) 2021.02.03
Data Handling Mindmap  (0) 2021.01.25
데이터분석을 위한 라이브러리, Pandas  (0) 2021.01.02

댓글