aleatorio.seed(): o que faz?
Estou um pouco confuso sobre o que random.seed()
faz em Python. Por exemplo, por que os ensaios abaixo fazem o que fazem (consistentemente)?
>>> 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
Não encontrei boa documentação sobre isto. Obrigado antecipadamente!
10 answers
Semear um gerador de números pseudo-aleatórios dá - lhe o seu primeiro valor "anterior". Cada valor de semente corresponderá a uma sequência de valores gerados para um dado gerador de números aleatórios. Isto é, se você fornecer a mesma semente duas vezes, você recebe a mesma sequência de números duas vezes.
Geralmente, você quer semear o seu gerador de números aleatórios com algum valor que irá mudar cada execução do programa. Por exemplo, o tempo atual é uma semente freqüentemente usada. A razão pela qual isso não acontece automaticamente é para que, se você quiser, você possa fornecer uma semente específica para obter uma sequência conhecida de números.
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
Experimenta isto. Digamos "Aleatório".o seed dá um valor ao gerador de valores aleatórios (random.randint()') que gera estes valores com base nesta semente. Uma das propriedades do mosto dos números aleatórios é que eles devem ser reprodutíveis. Uma vez que você coloca a mesma semente você obtém o mesmo padrão de números aleatórios. Então você está gerando-os desde o início de novo. Você dá uma semente diferente que começa com uma inicial diferente (acima de 3).
Você deu uma semente agora ela vai gerar números aleatórios entre 1 e 10 um após o outro. Então você pode assumir um conjunto de números para um valor de semente.
#Simple python programme to understand random.seed() importance
import random
random.seed(10)
for i in range(5):
print(random.randint(1,100))
Execute o programa acima várias vezes....
Primeira tentativa: imprime 5 inteiros aleatórios no intervalo de 1-100
Segunda tentativa: imprime os mesmos 5 números aleatórios apareceram na execução acima.
3. ª tentativa: mesmo.....So on
Explicação: cada vez que estamos executando o programa acima estamos configurando a semente para 10 , então o gerador aleatório toma isso como variável de referência.E depois, fazendo uma fórmula predefinida, gera um aleatório. numero.Assim, a configuração da semente para 10 na próxima execução novamente define o número de referência para 10 e novamente o mesmo comportamento começa....
Assim que reiniciamos o valor da semente, Ela dá as mesmas plantas. Nota: mude o valor da semente e execute o programa , verá uma sequência aleatória diferente da anterior.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])
>>>
Imho, é usado para gerar o mesmo resultado aleatório quando você usa random.seed(samedigit)
novamente.
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
Um número aleatório é gerado por alguma operação no valor anterior.
Se não houver valor anterior, então o tempo actual como valor anterior automaticamente.
podemos fornecer este valor anterior usando random.seed(x)
onde o x pode ser qualquer número ou cadeia de caracteres, etc.
Por isso random.random()
não é realmente um número aleatório perfeito que poderia ser previsto via {[[0]}.
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()
.
Aqui está um pequeno teste que demonstra que alimentar o método seed()
com o mesmo argumento irá causar o mesmo resultado pseudo-aleatório:
# 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)
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