갈루아의 반서재

 

np.random.seed(0) 은 난수를 예측가능하도록 만든다. 다음의 예를 보자. np.random.seed 를 사용하면 다음과 같이 동일한 셋트의 난수가 나타나게 된다. 

import numpy as np
np.random.seed(0) ; np.random.rand(4)

array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])

np.random.seed(0) ; np.random.rand(4)

array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])

 

하지만 random seed 가 리셋되지 않으면, 다음과 같이 매번 서로 다른 수가 나타나게 되는 것이다. 

np.random.rand(4)

array([0.4236548 , 0.64589411, 0.43758721, 0.891773 ])

np.random.rand(4)

array([0.4236548 , 0.64589411, 0.43758721, 0.891773 ])

 

 

NumPy random seed 의 구문은 아주 단순하다. 하나의 파라메터를 가지는데 seed 값이 바로 그것이다. seed_value 파라메터는 유사난수 생성기 "시드" 를 만드는 값이다. 

 

그러면 어떤 수를 seed_value 값으로 넣어야 하는가? 기본적으로 이는 중요한 문제가 아니다. numpy.random.seed(0) 을 쓰든 numpy.random.seed(42) 를 사용하든 아무 상관이 없다는 말이다. 대부분의 경우 해당 파라메터로 어떤 값을 넣든지 별 차이가 없다. 단지 서로 다른 시드를 사용할 경우 Numpy 로 하여금 서로 다른 유사난수를 생성하게 만든다는 점만 이해하면 된다. numpy.random 함수의 아웃풋은 여러분이 사용하고 있는 seed 값에 달린 것이다.

 

간단한 예를 통해 살펴보자. 첫 번째 예에서는 seed 값을 0 으로 설정했다. 

np.random.seed(0) 
np.random.randint(99, size = 5)

array([44, 47, 64, 67, 67])

 

np.random.randint 는 0 에서 99 사이의 5개의 정수를 가지는 하나의 배열을 생성한다. 위의 코드를 다시 실행해도 똑같은 값을 반환함을 볼 수 있다. 

 

다음으로 다른 시드값 1을 넣고 코드를 실행해보자. 

np.random.seed(1) 
np.random.randint(99, size = 5)

array([37, 12, 72, 9, 75])

 

단지 seed value 만 1 로 변경했는데 NumPy random randint 은 앞서와는 다른 배열을 반환했다. 서로 다른 시드이기 때문에 서로 다른 결과값이 나온 것이다. 

 

 

참고링크

https://stackoverflow.com/questions/21494489/what-does-numpy-random-seed0-do

https://www.sharpsightlabs.com/blog/numpy-random-seed/