NumPy는 수학 및 과학 연산을 위한 파이썬 외부 라이브러리이다. NumPy는 C언어로 구현되어 처리 속도가 빠른 편이다. 넘파이를 사용하기 위해선 아래와 같은 코드로 import 해주어야 한다.
cf. 넘파이를 편하게 사용하기 위해 np 라는 별칭을 사용한다.

import numpy as np


1. 배열(Array) 생성

Python의 list와는 다르게 NumPy 내의 요소들은 같은 데이터 타입을 가져야 한다. 이에 하나의 요소만 부동 소수, 나머지는 정수로 배열을 생성해도 모든 요소가 부동 소수 type으로 들어간다.

(1) 리스트로 배열 만들기

리스트를 NumPy 배열로 만드는 방법은 np.array() 함수를 사용하면 된다.

np.array([[1, 2, 3, 4],
          [5, 6, 7, 8]])
출력 결과
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

중첩 리스트를 array 함수에 넣으면 2개의 행, 4개의 열인 구조로 출력한다.

(2) 균일한 간격의 값으로 배열 만들기

특정 구간에서 균일한 간격으로 값을 만들어 배열로 만드는 방법엔 두 가지가 있다.

  • 간격을 특정 값으로 설정 : np.arange()
  • 간격 설정 X, 배열의 길이를 설정 : np.linspace()

2-1. arange

arange 함수의 인자로 2개만 전달한 경우엔 간격이 1로 자동 설정된다. 세 번째 인자를 전달하면 간격을 설정할 수 있다.

# 첫 번째 인자: 시작, 두 번째 인자: 종료(배열에 포함X)
np.arange(0, 10)
출력 결과
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 간격을 2로 설정
np.arange(0, 10, 2)
출력 결과
array([0, 2, 4, 6, 8])

2-1. linspace

linspace 함수의 인자로 2개만 전달한 경우엔 배열의 길이를 50으로 설정된다. 세 번째 인자를 전달하면 배열의 길이를 설정할 수 있다.

# 첫 번째 인자: 시작, 두 번째 인자: 종료(배열에 포함O)
np.linspace(0, 10)
출력 결과
array([ 0.        ,  0.20408163,  0.40816327,  0.6122449 ,  0.81632653,
        1.02040816,  1.2244898 ,  1.42857143,  1.63265306,  1.83673469,
        2.04081633,  2.24489796,  2.44897959,  2.65306122,  2.85714286,
        3.06122449,  3.26530612,  3.46938776,  3.67346939,  3.87755102,
        4.08163265,  4.28571429,  4.48979592,  4.69387755,  4.89795918,
        5.10204082,  5.30612245,  5.51020408,  5.71428571,  5.91836735,
        6.12244898,  6.32653061,  6.53061224,  6.73469388,  6.93877551,
        7.14285714,  7.34693878,  7.55102041,  7.75510204,  7.95918367,
        8.16326531,  8.36734694,  8.57142857,  8.7755102 ,  8.97959184,
        9.18367347,  9.3877551 ,  9.59183673,  9.79591837, 10.        ])
# 배열의 길이를 5로 설정
np.linspace(0, 10, 5)
출력 결과
array([ 0. ,  2.5,  5. ,  7.5, 10. ])

linspace 함수를 사용하면 배열 내의 요소들이 모두 부동 소수점으로 생성된다. linspacearange 함수의 차이는 다음과 같다.

  • 함수의 세 번째 인자
    • arange : 간격 크기
    • linspace : 배열 크기

(3) 특정 값으로 채워진 배열 만들기

특정 값으로 채워진 배열을 만드는 방법엔 두 가지가 있다. 0으로 채우거나 1로 특정 구조의 배열을 생성할 수 있다. 이때 생성된 배열의 요소는 모두 부동 소수점 형태를 가진다.

  • 0으로 채워진 배열 : np.zeros()
  • 1로 채워진 배열 : np.ones()

3-1. zeros

np.zeros(3)
출력 결과
array([0., 0., 0.])

3-2. ones

# 3 X 3 형태의 배열 생성
np.ones((3, 3))
출력 결과
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

zerosones 함수를 사용할 때 주의해야할 점은 다음과 같다.

  • 1차 형태의 배열 생성 : 정수의 값을 전달
  • 2차 형태의 배열 생성 : 튜플로 배열의 구조 값을 전달

3-3. 0과 1이 아닌 값

0과 1이 아닌 특정 값으로 채워진 배열을 만들려면 zeros 또는 ones 함수에 연산을 통해 요소를 특정 값으로 만들어주면 된다.

# 5로 채워진 2 X 2 배열 생성하기
np.ones((2, 2)) * 5
출력 결과
array([[5., 5.],
       [5., 5.]])

(4) 랜덤한 값으로 채워진 배열 만들기

랜덤한 값으로 채워진 배열을 만드는 방법은 다음과 같다.

  • 0과 1사이의 랜덤한 값 : np.random.rand()
  • 표준 정규 분포의 샘플 값 : np.random.randn()
  • 특정 구간 사이의 랜덤한 정수 값 : np.random.randint()

randrandn 함수는 ones, zeros 함수와는 다르게 2차 형태의 배열을 만들고 싶으면 튜플 형태가 아닌 인자 두 개를 전달하면 된다. (행과 열에 대한 인자)

4-1. rand

# 0~1 사이의 값 5개를 배열로 생성
np.random.rand(5)
출력 결과
array([0.87011215, 0.2997851 , 0.1004783 , 0.10131234, 0.33260521])

4-2. randn

표준정규분포는 평균이 0, 표준편차가 1이라는 특징을 가진다. rand와는 달리 0에 가까운 값들이 나타날 가능성이 높다.

# 5 X 5 구조의 배열 생성
np.random.randn(5, 5)
출력 결과
array([[-0.86923712, -1.17543339,  0.24400273, -0.12805383,  0.00763696],
       [-1.84656358, -0.48432583, -0.82094485, -0.62611431, -0.28293088],
       [ 2.67597086,  1.63299529, -0.37600519,  1.92989594, -0.0391045 ],
       [ 0.95696892, -1.19755377,  1.42040408,  0.02056052,  0.18904603],
       [-0.69385663,  0.18874442,  0.63048257, -0.25986648, -0.33083089]])

4-3. randint

randint 함수에 두 개의 인자(구간)만 전달한다면 하나의 랜덤한 값만 출력된다.

# 범위만 지정
np.random.randint(1, 100)
출력 결과
31
# 범위와 개수 지정
np.random.randint(1, 100, 10)
출력 결과
array([ 2, 95, 46, 15, 33, 24, 82,  5, 41, 30])
# 2차 배열 생성 -> 튜플로 전달
np.random.randint(1, 100, (5, 5))
출력 결과
array([ 2, 95, 46, 15, 33, 24, 82,  5, 41, 30])

(5) 단위 행렬 만들기

대각선 방향에 있는 요소는 1, 나머지는 0인 단위 행렬(Identity Matrix)를 만드는 함수는 np.eye() 이다. 단위 행렬은 행과 열의 값이 같은 구조를 가지기 때문에(정사각형) 크기를 어떻게 설정할 것인지 인자를 하나만 전달하면 된다.

# 5 X 5 단위 행렬 
np.eye(5)
출력 결과
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])

(6) 동일한 무작위 값을 포함하는 배열 만들기

랜덤한 값으로 배열을 만들면 실행할 때마다 다른 요소가 포함된 배열을 생성하게 된다. 이때 랜덤한 값으로 배열을 생성하되 동일한 배열을 만들려면 seed 함수를 사용하여 랜덤한 값들을 고정하면 된다.
cf. 인자로 다양한 수를 전달 할 수 있다.

np.random.seed(42)


2. Reference


👩🏻‍💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.

댓글남기기