source

random.seed():그게 뭘 하는데?

factcode 2023. 1. 9. 21:13
반응형

random.seed():그게 뭘 하는데?

뭐가 뭔지 좀 헷갈리네요.random.seed()파이썬예를 들어, 아래 시험에서는 왜 (일관적으로) 수행하는가?

>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7

나는 이것에 대한 좋은 문서를 찾을 수 없었다.

의사 난수 생성기는 값에 대해 몇 가지 연산을 수행함으로써 작동합니다.일반적으로 이 값은 제너레이터에 의해 생성된 이전 숫자입니다.그러나 생성기를 처음 사용할 때는 이전 값이 없습니다.

의사 난수 생성기를 시드하면 첫 번째 "이전" 값이 생성됩니다.각 시드 값은 지정된 난수 생성기에 대해 생성된 일련의 값에 대응합니다.즉, 같은 시드를 2회 제공하면 같은 번호의 시퀀스가 2회 표시됩니다.

일반적으로 프로그램의 각 실행을 변경하는 값을 사용하여 난수 생성기를 시드하려고 합니다.예를 들어 현재 시간은 자주 사용되는 시드입니다.이 문제가 자동으로 발생하지 않는 이유는 원하는 경우 특정 시드를 제공하여 알려진 번호 시퀀스를 얻을 수 있기 때문입니다.

다른 모든 답변에서는 random.seed()의 사용이 설명되지 않는 것 같습니다.간단한 예(소스)를 다음에 나타냅니다.

import random
random.seed( 3 )
print "Random number with seed 3 : ", random.random() #will generate a random number 
#if you want to use the same random number once again in your program
random.seed( 3 )
random.random()   # same random number as before
>>> random.seed(9001)   
>>> random.randint(1, 10)  
1     
>>> random.seed(9001)     
>>> random.randint(1, 10)    
1           
>>> random.seed(9001)          
>>> random.randint(1, 10)                 
1                  
>>> random.seed(9001)         
>>> random.randint(1, 10)          
1     
>>> random.seed(9002)                
>>> random.randint(1, 10)             
3

이거 먹어봐.

'랜덤'이라고 합시다.seed'는 랜덤 값 생성기('randint()')에 값을 지정합니다.이 값은 이 시드를 기반으로 이러한 값을 생성합니다.난수의 필수 특성 중 하나는 재현 가능해야 한다는 것입니다.같은 씨앗을 넣으면 같은 패턴의 난수를 얻을 수 있습니다.이렇게 하면 처음부터 바로 생성할 수 있습니다.다른 시드를 지정하면 다른 이니셜(3위)로 시작합니다.

시드가 지정되면 1에서 10 사이의 난수가 차례로 생성됩니다.따라서 하나의 시드 값에 대해 하나의 숫자 집합을 가정합니다.

이전 값에 대한 일부 연산에 의해 난수가 생성됩니다.

이전 값이 없는 경우 현재 시간은 자동으로 이전 값으로 간주됩니다.은 '으로'로 나타낼 수 .random.seed(x)서 ''는x임의의 숫자나 문자열 등이 될 수 있습니다.

때문에, 「 」는 할 수 없습니다.random.random(), 을 통해 할 수 . 을 사용하다random.seed(x).

import random 
random.seed(45)            #seed=45  
random.random()            #1st rand value=0.2718754143840908
0.2718754143840908  
random.random()            #2nd rand value=0.48802820785090784
0.48802820785090784  
random.seed(45)            # again reasign seed=45  
random.random()
0.2718754143840908         #matching with 1st rand value  
random.random()
0.48802820785090784        #matching with 2nd rand value

따라서 알고리즘에서 실행되기 때문에 난수 생성은 실제로 랜덤이 아닙니다.알고리즘은 항상 같은 입력에 근거해 같은 출력을 제공합니다.이것은 씨앗의 값에 따라 다르다는 것을 의미합니다. 랜덤하게 자동으로 이 됩니다.seed().

Seed() can be used for later use ---

Example:
>>> import numpy as np
>>> np.random.seed(12)
>>> np.random.rand(4)
array([0.15416284, 0.7400497 , 0.26331502, 0.53373939])
>>>
>>>
>>> np.random.seed(10)
>>> np.random.rand(4)
array([0.77132064, 0.02075195, 0.63364823, 0.74880388])
>>>
>>>
>>> np.random.seed(12) # When you use same seed as before you will get same random output as before
>>> np.random.rand(4)
array([0.15416284, 0.7400497 , 0.26331502, 0.53373939])
>>>
>>>
>>> np.random.seed(10)
>>> np.random.rand(4)
array([0.77132064, 0.02075195, 0.63364823, 0.74880388])
>>>
# Simple Python program to understand random.seed() importance

import random

random.seed(10)

for i in range(5):    
    print(random.randint(1, 100))

위의 프로그램을 여러 번 실행합니다...

첫 번째 시도: 1~100 범위의 5개의 랜덤 정수를 출력합니다.

두 번째 시도: 위의 실행에서 동일한 5개의 난수가 출력되었습니다.

세 번째 시도: 동일

.....곧.

설명:위의 프로그램을 실행할 때마다 시드를 10으로 설정하고 랜덤 생성기는 이를 참조 변수로 사용합니다.그리고 미리 정의된 수식을 통해 난수를 생성합니다.

따라서 다음 실행에서 시드를 10으로 설정하면 참조 번호가 10으로 설정되고 동일한 동작이 다시 시작됩니다.

씨앗 값을 재설정하자마자 동일한 식물에 부여됩니다.

주의: 시드 값을 변경하고 프로그램을 실행하면 이전과는 다른 랜덤 시퀀스가 나타납니다.

이 경우 랜덤은 실제로는 의사 랜덤입니다.시드가 지정되면 동일한 분포의 숫자가 생성됩니다.하지만 같은 시드로 매번 같은 번호의 시퀀스를 생성합니다.바꾸려면 씨를 바꿔야 해요.많은 사람들이 현재의 시간이나 뭐 그런 것에 근거해 씨앗을 만들고 싶어해요.

해서, 이렇게 , 이렇게 하면 같은 를 낼 수 요.random.seed(samedigit)

In [47]: random.randint(7,10)

Out[47]: 9


In [48]: random.randint(7,10)

Out[48]: 9


In [49]: random.randint(7,10)

Out[49]: 7


In [50]: random.randint(7,10)

Out[50]: 10


In [51]: random.seed(5)


In [52]: random.randint(7,10)

Out[52]: 9


In [53]: random.seed(5)


In [54]: random.randint(7,10)

Out[54]: 9

를 합니다.seed(x)난수 집합을 생성하기 전에 동일한 시드를 사용하여 동일한 난수 집합을 생성합니다.문제를 재현하는 경우에 편리합니다.

>>> from random import *
>>> seed(20)
>>> randint(1,100)
93
>>> randint(1,100)
88
>>> randint(1,100)
99
>>> seed(20)
>>> randint(1,100)
93
>>> randint(1,100)
88
>>> randint(1,100)
99
>>> 

제 이해는 이렇습니다.시드 값을 설정할 때마다 "라벨" 또는 "참조"가 생성됩니다.다음 랜덤.함수 호출은 이 "라벨"에 첨부되므로 다음 번에 동일한 시드 값과 랜덤으로 호출할 수 있습니다.동일한 결과를 얻을 수 있습니다.

np.random.seed( 3 )
print(np.random.randn()) # output: 1.7886284734303186

np.random.seed( 3 )
print(np.random.rand()) # different function. output: 0.5507979025745755

np.random.seed( 5 )
print(np.random.rand()) # different seed value. output: 0.22199317108973948

random.seed(a, version)in python은 PRNG(Pseudo-Random Number Generator)를 초기화하기 위해 사용됩니다.

PRNG는 난수의 속성에 근접한 숫자의 시퀀스를 생성하는 알고리즘입니다.이러한 난수는 시드 값을 사용하여 재현할 수 있습니다.따라서 시드 값을 지정하면 PRNG는 시드를 사용하여 임의의 시작 상태에서 시작됩니다.

" "a드드값값값값다다a 값이 다음과 같은 경우None디폴트로는 현재 시스템 시각이 사용됩니다.

★★★★★★★★★★★★★★★★★」version파라미터를 정수로 변환하는 방법을 지정하는 정수입니다.2번입니다.

import random
random.seed(9001)
random.randint(1, 10) #this gives output of 1
# 1

동일한 난수를 재생성하려면 동일한 시드를 다시 제공하십시오.

random.seed(9001)
random.randint(1, 10) # this will give the same output of 1
# 1

시드를 제공하지 않으면 이전과 같이 1이 아닌 다른 번호가 생성됩니다.

random.randint(1, 10) # this gives 7 without providing seed
# 7

이전과 다른 시드를 제공하면 다른 난수를 얻을 수 있습니다.

random.seed(9002)
random.randint(1, 10) # this gives you 5 not 1
# 5

즉, 같은 난수를 재현하려면 시드를 입력합니다. 정확히는 같은 씨앗이죠

여기 작은 테스트 결과가 있습니다.seed()같은 인수의 메서드에서는 다음과 같은 의사 중복 결과가 발생합니다.

# testing random.seed()

import random

def equalityCheck(l):
    state=None
    x=l[0]
    for i in l:
        if i!=x:
            state=False
            break
        else:
            state=True
    return state


l=[]

for i in range(1000):
    random.seed(10)
    l.append(random.random())

print "All elements in l are equal?",equalityCheck(l)

언급URL : https://stackoverflow.com/questions/22639587/random-seed-what-does-it-do

반응형