본문 바로가기
  • Hello_
Python/Numpy

[Python] np.random - 난수 생성하기

by LDwDL 2022. 9. 12.
728x90
반응형

오늘은 numpy로 난수를 생성하는 random 함수에 대해 포스팅하겠다. 

 

np.random.rand()

0 이상 1 미만의 범위 내에 주어진 argument 만큼 난수를 생성한다.

import numpy as np

np.random.rand(3)
# array([0.60407304, 0.97595625, 0.3530597 ])

np.random.rand(3,3)
"""
array([[0.95799066, 0.43424117, 0.59480775],
       [0.93778055, 0.97494792, 0.81196245],
       [0.15744564, 0.05079325, 0.562474  ]])
"""

argument가 1개로 들어가면 1-d 형태로 난수를 생성하며 2개를 입력하면 2-d 형태로 난수를 생성한다.

 

np.random.randint()

주어진 argument에 따라 난수 생성 범위가 정해진다. 2개의 argument가 주어진다면 첫 번째가 최솟값이며 두 번째가 최댓값으로 범위가 설정된다. 만약 1개의 argument가 주어진다면 최솟값의 default가 0이므로 0 이상 argument 미만 범위의 난수가 생성된다.

np.random.randint(5, size=3)
# array([1, 4, 0])

np.random.randint(5,10, size=(3,3))
"""
array([[7, 8, 5],
       [7, 7, 8],
       [5, 6, 6]])
"""

 

np.random.normal()

정규분포를 따라 난수를 생성시켜주는 함수이다. 첫번째 argument는 평균이며 두 번째 argument는 표준편차의 제곱근으로 입력이 된다.

np.random.normal(0,1,3) # 평균 0, 표준편차 1 정규분포 (표준정규분포)
# array([2.07966068, 1.31838192, 0.06320669])

np.random.normal(3,2,3) # 평균 3, 표준편차 4 정규분포
# array([1.45656667, 2.15905746, 3.85229432])

np.random.normal(3,2,(3,3)) # 평균 3, 표준편차 4 정규분포
"""
array([[ 6.47674027,  3.81290819,  3.64421214],
       [ 2.89696456,  2.59159807,  6.95869687],
       [-0.23860013,  0.77207117,  2.10511856]])
"""

마지막 argument는 사이즈이다.

 

np.random.randn(), np.random.standard_normal()

이 두가지 함수는 모두 표준정규분포를 따르는 난수들을 생성한다. 다만 차이점은 np.random.standard_normal() 함수는 입력은 tuple로 입력을 받는다.

# 표준정규분포 난수 생성 (평균 0, 표준 편차 1)

np.random.randn(3)
# array([ 0.74135627, -0.79536493,  0.24305304])

np.random.randn(3,3)
"""
array([[ 0.98238544, -0.64256871,  0.10750515],
       [ 0.1737801 ,  1.36333232, -0.5860791 ],
       [ 0.27674028, -0.61979036,  0.06931072]])
"""

np.random.standard_normal(3)
# array([-0.22529523, -1.4254539 , -0.2659656 ])

np.random.standard_normal((3,3))
"""
array([[-1.37319796, -0.46548084, -0.05282945],
       [-1.32685494, -0.42176808, -0.83722265],
       [ 1.82402059,  0.78627155, -0.06513189]])
"""

 

np.random.seed()

난수를 생성할 때 고유 시드를 제공하는 함수이다. 시드를 동일하게 선언하고 난수를 생성한다면 동일한 난수들이 생성된다.

for i in range(10):
    np.random.seed(123)
    print(np.random.rand(3))
    
"""
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
[0.69646919 0.28613933 0.22685145]
"""

 

다음과 같이 random 함수에는 다양한 조건의 난수들을 생성할 수 있도록 한다. 특히 np.random.seed()는 데이터 증강을 할 때 데이터 원본과 라벨을 동시에 동일한 변화를 주고 싶을 때 유용하게 사용이 될 수 있으니 눈여겨보면 좋다.

 

 

 

728x90
반응형

댓글