Numpy | random 함수 사용법, 예시

넘파이 라이브러리를 활용해 난수 생성하기 (랜덤한 정수, 0~1사이, 정규분포)

import numpy as np

numpy.random 쓰는 방법을 자꾸 까먹어서,,, 적어 놔야지.

랜덤한 int 생성하기

numpy.random.randint를 사용하여 임의의 정수 array를 만들 수 있다.

random.randint(low, high, size, dtype)

  • [low, high) 범위의 int 생성, discrete uniform distribution1 기반
  • 필수 파라미터: low
  • 파라미터 high를 명시하지 않은 경우 [0, low) 범위의 int 생성
  • 파라미터 size를 명시하지 않은 경우 single int 생성

randint() 예시

import numpy as np

np.random.randint(5) # 0~4까지 랜덤 정수 1개 생성
### >>> 0

np.random.randint(5, size=4) # 0~4까지 랜덤 정수, 길이가 4인 array 생성
### >>> array([4, 1, 4, 3])

np.random.randint(5, size=(2, 3)) # 0~4까지 랜덤 정수, 크기가 (2, 3)인 2차원 array 생성
### >>> array([[2, 1, 3],
### >>>        [4, 1, 0]])

np.random.randint(1, 11, size=6) # 1~10까지 랜덤 정수, 길이가 6인 array 생성
### >>> array([3, 5, 2, 8, 6, 8])

0 ~ 1 사이의 랜덤한 난수 생성하기

numpy.random.rand를 활용하여 0~1 범위의 랜덤한 실수 array 생성

random.rand(d0, d1, …, dn)

  • [0, 1) 범위의 난수 생성
  • numpy.zeros 혹은 numpy.ones를 사용해서 0과 1로 초기화된 특정 크기의 array를 만드는 것처럼, 랜덤한 샘플 array를 생성할 때 자주 쓰인다.
  • 파라미터로 dimension, 즉 array 크기만 지정

rand() 예시

import numpy as np

np.random.rand(3) # 1x3 array
### >>> array([0.88843017, 0.08603825, 0.574518  ])

np.random.rand(2, 4) # 2x4 array
### >>> array([[0.97885576, 0.78156378, 0.74111103, 0.38431599],
### >>>       [0.51179429, 0.43498217, 0.4356467 , 0.86757286]])

표준 정규 분포를 따르는 난수 생성하기

numpy.random.randn를 활용하여 표준 정규분포 (standard normal distribution)을 따르는 난수 생성

random.randn(d0, d1, … , dn)

  • standard normal distribution: 평균이 0, 표준 편차가 1인 표준 정규 분포를 따름
  • 파라미터로 dimension 만 지정
import numpy as np

np.random.randn()
### >>> 2.1923875335537315  # random

np.random.randn(2, 3)
### >>> array([[ 0.67294205, -0.65654402, -1.21734529],
### >>>       [-1.32495713, -1.01700438, -0.13663216]])

정규 분포를 따르는 난수 생성하기

numpy.random.normal를 활용하여 평균과 표준 편차를 지정한 정규 분포에서의 난수 생성

random.normal(loc, scale, size)

  • 평균이 loc, 표준 편차가 scale인 정규 분포를 따름
  • deep learning에서 가중치 초기화를 조절할 때 사용할 수 있음 (Xavier 초기화2, He 초기화3)
import numpy as np

s = np.random.normal(0, 0.1, 5)
### >>> array([-0.00212207,  0.1124257 , -0.09070432,  0.01982677, -0.17008441])

Reference

  • https://numpy.org/doc/stable/reference/random/generator.html
  • https://numpy.org/doc/stable/reference/random/generated/numpy.random.rand.html
  • https://reniew.github.io/13/
  1. 이산균등분포, 모든 숫자가 나올 확률이 동등한 분포 (ex. 주사위) ↩︎

  2. 노드 개수에 따라 표준 편차를 다르게 하여 가중치 초기화를 하는 방법 ↩︎

  3. Xavier 초기화 방법과 마찬가지로 노드 개수에 따라 표준 편차를 조절, relu형 함수(선형 activation function)에 사용 ↩︎