달나라 노트

Python numpy : random seed (예상되는 난수 생성하기) 본문

Python/Python numpy

Python numpy : random seed (예상되는 난수 생성하기)

CosmosProject 2022. 1. 22. 22:56
728x90
반응형

 

 

 

import numpy as np

arr_1 = np.random.rand(5)
print(arr_1)

arr_2 = np.random.rand(5)
print(arr_2)


-- Result
[0.64589411 0.43758721 0.891773   0.96366276 0.38344152]
[0.79172504 0.52889492 0.56804456 0.92559664 0.07103606]

numpy의 rand method로 랜덤한 숫자를 생성하면 위처럼 생성할때마다 다른 숫자가 return될겁니다.

(같은 숫자가 return될 확률도 있지만 너무나도 적은 확률이겠죠.)

 

 

 

 

import numpy as np

np.random.seed(seed=0)
arr_1 = np.random.rand(5)
print(arr_1)

np.random.seed(seed=0)
arr_2 = np.random.rand(5)
print(arr_2)


-- Result
[0.5488135  0.71518937 0.60276338 0.54488318 0.4236548 ]
[0.5488135  0.71518937 0.60276338 0.54488318 0.4236548 ]

그러면 위 코드를 봅시다.

이전에 봤던 예시와의 차이는 동일하게 rand method를 사용하여 랜덤한 숫자들을 추출하고 있으나 seed method가 더해진 것일 뿐입니다.

 

그 결과를 보면 놀랍게도 arr_1과 arr_2의 값이 완전히 동일합니다.

 

보통 rand method는 코드를 실행할 때 마다 다른 숫자를 return하는데

seed method를 사용하면 몇번을 실행해도 동일한 난수를 return하도록 할 수 있습니다.

 

이것이 seed method의 역할입니다.

 

 

이를 더 정확히 이해하려면 random이라는 개념을 컴퓨터가 어떻게 처리하는지를 알아야 합니다.

 

컴퓨터는 사실 random을 알지 못합니다.

컴퓨터에게 어떠한 숫자를 return해라 라고 하기 위해선 어떠한 input 값들이 있고 이 값들을 더하고 빼고 곱하고 나눠서 최종 결과 숫자를 return하는 것입니다.

그래서 컴퓨터는 random한 숫자를 추출하기 위해 어떠한 시작이 되는 숫자에 뭔가를 더하고 곱하고 나눠서 random한 숫자를 만들어 냅니다.

여기서 첫 단계에 시작이 되는 숫자는 현재 서버 시간, 컴퓨터 시간 등을 사용하는 경우가 많구요.

 

그리고 이렇게 추출된 random한 숫자를 저장해뒀다가 다음 random 숫자를 추출할 때 쓰기도 하구요.

 

seed()의 역할은 여기서 말하는 처음 시작 숫자를 결정하는 것입니다.

그래서 seed() method에 전달된 숫자가 동일하다면 그 결과로 나오는 random한 숫자도 동일하게 추출될 수 있는 것이죠.

 

 

 

 

 

 

그러면 seed method의 parameter로 들어가있던 seed=0은 무엇을 의미할까요?

import numpy as np

np.random.seed(seed=0)
arr_1 = np.random.rand(5)
print(arr_1)

np.random.seed(seed=1)
arr_2 = np.random.rand(5)
print(arr_2)

np.random.seed(seed=50)
arr_3 = np.random.rand(5)
print(arr_3)


-- Result
[0.5488135  0.71518937 0.60276338 0.54488318 0.4236548 ]
[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01 1.46755891e-01]
[0.49460165 0.2280831  0.25547392 0.39632991 0.3773151 ]

seed=0은 seed value를 의미합니다.

seed method는 seed value 하나만을 parameter로 받습니다.

 

seed value가 다르면 random한 숫자를 생성하기 위한 시작 숫자가 달라지기 때문에 rand method로 인해 return되는 숫자도 달라집니다.

 

위 예시를 보면 seed value를 다르게 설정해놓으니 return되는 숫자들도 달라지죠.

 

 

 

 

import numpy as np

np.random.seed(seed=1)
arr_1 = np.random.randint(0, 100, size = 3)
print(arr_1)

np.random.seed(seed=1)
arr_2 = np.random.randint(0, 100, size = 3)
print(arr_2)

np.random.seed(seed=10)
arr_3 = np.random.randint(0, 100, size = 3)
print(arr_3)

np.random.seed(seed=10)
arr_4 = np.random.randint(0, 100, size = 3)
print(arr_4)


-- Result
[37 12 72]
[37 12 72]
[ 9 15 64]
[ 9 15 64]

seed method는 randint에도 적용할 수 있습니다.

numpy에서 난수관련 method에는 적용할 수 있다고 보면 됩니다.

 

 

 

 

 

 

728x90
반응형
Comments