잇뉴얼 (IT_Manual)

[딥러닝 기초] 딥러닝 학습에 필요한 도구 - Numpy란? & ndarray 생성방법 본문

Deep Learning

[딥러닝 기초] 딥러닝 학습에 필요한 도구 - Numpy란? & ndarray 생성방법

잇뉴얼 2022. 7. 7. 04:03
728x90
반응형

[딥러닝 기초] 딥러닝 학습에 필요한 도구 - Numpy란? & ndarray 생성방법


인공지능 학습을 위해서는 기본적으로 알아야될 파이썬 패키지가 있습니다.

  • Numpy [ 수치 계산 ]
  • Pandas [ 데이터 분석 ]
  • matplotlib, seaborn [ 데이터 시각화 ]

이번 포스트에서는 Numpy에 대해 간단하게 알아볼까 합니다.

Numpy [ Numerical Python ]

Numpy는 다차원 행렬의 연산을 제공하는 수치계산 도구입니다. Pandas, Scikit-learn,PyTorch 등과 같은 데이터 사이언스 도구들이 NumPy에 의해 만들어졌습니다. Numpy의 특징은 다음과 같습니다.

  • Matrix와 Vector와 같은 Array 연산의 사실상의 표준이다.
  • 파이썬의 고성능 과학 계산용 패키지
  • 하나의 데이터 type만 배열에 넣을 수 있다.
  • 일반 List에 비해 빠르고, 메모리에 효율적이다.
  • List와 가장 큰 차이점은 Dynamic typing 을 지원하지 않는다.
  • 반복문 없이 데이터 배열에 대한 처리를 지원한다.
  • 선형대수와 관련된 다양한 기능을 제공한다.
  • C, C++, 포트란 등의 언어와 통합이 가능하다.

import numpy as np

numpy를 사용하기 위해서는 패키지를 먼저 추가를 해줘야합니다.

  • 'import numpy'만 작성하면, numpy 패키지를 사용할 수 있는 상태가 되지만, numpy를 사용하기 위해서 코드줄마다 numpy를 작성해야됩니다. 그래서 'as np'를 뒤에 작성함으로써 numpy를 사용할 시에 'np'라는 alias(별칭)만 작성을 하면 됩니다.

numpy는 np.array 함수를 활용하여 배열을 생성합니다. 이것이 ndarray입니다.

# 1차원 배열 생성
a = np.array([2,5,7])

# Dtype 설정시
a1 = np.array([1,2,3,4,5], float)
# 결과 : array([ 1., 2., 3., 4., 5.])
a2 = np.array(['1','2','3',4,5], np.float32) 
# '1','2','3'의 값은 str이지만 float으로 출력 [단 'in'과 같은 str의 경우 ValueError 발생]
# 결과 : array([ 1., 2., 3., 4., 5.])


# 다른 타입이 들어올 경우 numpy는 상위 타입으로 캐스팅하여 저장한다.
a3 = np.array([1,2,3,4,5.0,'str'])
type(a[0])
# 결과 : numpy.str_

# 다차원 배열 생성
b = np.array([[1,2,3],[4,5,6]])

# 0으로 채워진 int 배열
np.zeros(10, dtype = int)
# 결과 : array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

# 3 * 5 부동 소수점 배열
np.ones((3,5), dtype = np.float32)
# 결과 : 
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

# 3.14로 재워진 4 * 5 배열
np.full((4,5), 3.14)
# 결과 : 
array([[3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14]])

# empty - shape만 주어지고 비어있는 ndarray 생성, 메모리 초기화는 되지 않음 [ 사용빈도수가 적음]
np.empty(shape=(10,), dtype=np.int8)
# 결과 : array([ -32,  -45, -108,   96,  -17,   85,    0,    0,    2,    0], dtype=int8)
np.empty((4,5))
# 결과 : 
array([[4.66825861e-310, 4.66826011e-310, 4.66826011e-310,
        4.66826011e-310, 4.66826011e-310],
       [4.66826011e-310, 4.66826011e-310, 4.66826011e-310,
        4.66826011e-310, 4.66826011e-310],
       [4.66826011e-310, 4.66826011e-310, 4.66826011e-310,
        4.66826011e-310, 4.66826011e-310],
       [4.66826011e-310, 0.00000000e+000, 0.00000000e+000,
        0.00000000e+000, 0.00000000e+000]])

# 단위 행렬(i 행렬)을 생성
np.identity(4)
# 결과 : 
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

# 대각선이 1인 행렬, k값의 시작 index의 변경이 가능
np.eye(N=3, M=4)
# 결과 : 
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.]])
np.eye(3,5,k=2) # k 는 start index
# 결과 : 
array([[0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])

# 0 ~ 10 사이의 값으로 채워진 배열
np.arange(10)
# 결과 : array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 0 ~ 10 사이의 2간격의 값으로 채워진 배열
np.arange(0,10,2)
# 결과 : array([0, 2, 4, 6, 8])
       
# 0 ~ 1 사이에 같은 간격의 5개의 값으로 채워짐
np.linspace(0,1,5)
# 결과 : array([0.  , 0.25, 0.5 , 0.75, 1.  ])
위에서 언급해드렸지만 ndarray의 경우 같은 종류의 데이터만 배열에 담을수 있다는점을 알야두셔야합니다.

 

반응형
Comments