[Python] Numpy 난수 생성하기 : Random 모듈
Numpy 패키지, Random 모듈
필자는 학술 동아리 개인 작품 준비 중에(numpy로 구현하는 CNN 모델) 생각보다 딥러닝 개념이 문제가 아니라 파이썬이 어렵다고 느꼈다. 그래서 한가지 한가지씩 작품을 만들면서 정리해보려고 한다.
random.rand()
()안에 주어진 형태의 난수 array를 생성합니다. 범위는 [0,1) 안에서 고르게 분포한 난수를 생성합니다.
import numpy as np
A = np.random.rand(3) #그냥 3개
print(A, "\n")
B = np.random.rand(3, 5) #3행 5열 행렬
print(B)
항상 파이썬을 보면 어떠한 함수나 모듈이든 주로 최대값의 범위에는 등호가 빠지는 것 같습니다.
[0.15956293 0.93988691 0.81135784]
[[0.93733126 0.5420232 0.86063581 0.50221703 0.23209499]
[0.19866331 0.41394889 0.17090054 0.09292363 0.16301191]
[0.51794414 0.86034212 0.24836709 0.93808575 0.68783777]]
random.randint()
()안에 들어가는 두 숫자의 범위 내에서 임의의 정수를 만듭니다.
[최소값, 최대값)22.10.7) 실제로 해보니까 [최소값, 최대값] 입니다. 맨오른쪽 숫자 범위도 포함이에요
import numpy as np
A = np.random.randint(5, size=3)
print(A, "\n")
B = np.random.randint(1, 31, size=4)
print(B, "\n")
C = np.random.randint(1, 100, size=(5,3))
print(C)
[3 1 1]
[15 18 15 2]
[[ 9 77 25]
[62 65 7]
[34 58 51]
[89 85 21]
[62 35 63]]
(수정완료) np.random.randint(5, size=3) : 숫자를 하나만 입력하면 최소값은 0부터 시작합니다 그래서 [0,5] 범위에서 임의의 3개의 정수를 생성합니다.
np.random.randint(1, 31, size=4) : [1,31] 범위에서 임의의 4개의 정수를 생성합니다.
np.random.randint(1, 100, size=(5,3)) : [1,100] 범위에서 5행3열 크기의 행렬을 생성합니다.
random.randn()
random.randn() 함수는 표준정규분포로부터 샘플링된 난수를 생성합니다. (평균은 0, 표준편차 1)
import numpy as np
A = np.random.randn(5)
print(A, "\n")
B = np.random.randn(3, 2)
print(B, "\n")
sigma, mu = 2, 3.5 #뮤(평균:3.5), 시그마(표준편차:2)인 정규분포를 만들고 싶을 때
C = sigma * np.random.randn(4) + mu
print(C)
[ 0.53025229 -1.36467584 0.21358628 1.3010537 1.04250187]
[[-1.59557045 -0.54093349]
[-0.06473184 -1.13514113]
[-0.0859304 -0.95643611]]
[3.87633648 3.24394842 7.6882214 5.9232728 ]
randn 의 마지막 철자 n 이 Standard Normal Distribution 의 n을 의미합니다.
그레서 randn 사용시 평균이 0, 표준편차가 1 인 표준정규분포를 따르는 난수를 생성합니다.
평균과, 표준편차를 원하는 값으로 설정하고 싶다면,
(원하는 표준편차값) * np.random.randn() + (원하는 평균값) 과 같이 사용할 수 있습니다.
random.standard_normal()
random.randn 과 전부 동일하지만, 튜플을 인자로 받는 다는 차이점이 존재합니다.
randn와 동일하므로 예제는 생략하겠습니다.
random.normal()
위에서 소개한 random.randn 의 마지막 예제처럼 원하는 평균과 표준편차로 사용할 수 있는 함수입니다.
import numpy as np
A = np.random.normal(0, 1, 4)
print(A, "\n")
B = np.random.normal(3, 0.1, (2,3))
print(B)
[-1.0660302 -0.89718494 -0.72848177 1.74503485]
[[3.17550407 2.97539432 2.93842555]
[3.03159939 2.87381908 3.10048377]]
A 는 평균이 0, 표준편차가 1인 정규분포를 따르는 난수를 4개 생성하고
B는 평균이 3이고 표준편차가 0.1인 정규분포를 따르는 난수를 2행3열의 행렬로 생성합니다.
random.random_sample()
random.rand 와 무엇이 다른지 모르겠습니다. [0.0, 1.0) 범위에서 샘플링된 실수를 반환합니다.
rand와 동일하므로 예제는 생략하겠습니다.
random.choice()
random.choice() 함수는 최소값은 0부터 ()안의 첫번째 숫자까지를 두번째 숫자만큼의 개수를 반환합니다.
import numpy as np
A = np.random.choice(10, 3)
print(A, "\n")
B = np.random.choice(3, (2,3))
print(B)
[3 9 6]
[[1 2 0]
[0 1 0]]
random.seed()
보통 딥러닝이나, 어떤 실험을 할 때, 동일한 난수생성을 위해서 많이 사용합니다. random.seed() 함수는 난수 생성에 필요한 시드를 설정합니다.
import numpy as np
np.random.seed(2)
print(np.random.rand(2, 3))
[[0.4359949 0.02592623 0.54966248]
[0.43532239 0.4203678 0.33033482]]
언제 돌려도 항상 동일한 행렬이 출력됩니다.
이상 random 모듈에 대해서 알아보았습니다~
Leave a comment