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!

Author: Ahaan S. Rungta, 2014-03-25

10 answers

Os geradores Pseudo-aleatórios funcionam executando uma operação com um valor. Geralmente este valor é o número anterior gerado pelo gerador. No entanto, a primeira vez que você usa o gerador, não há nenhum valor anterior.

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.

 134
Author: Eric Finn, 2014-03-25 15:52:57
Todas as outras respostas parecem não explicar o uso do Aleatório.semente(). Aqui está um exemplo simples ( Fonte):
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
 59
Author: Ritesh Karwa, 2016-10-27 14:08:49
>>> 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.
 18
Author: Yogesh, 2016-10-27 14:04:38
Neste caso, aleatório é pseudo-aleatório. Dada uma semente, Ela irá gerar números com uma distribuição igual. Mas com a mesma semente, gerará sempre a mesma sequência numérica. Se queres que mude, terás de mudar a tua semente. Muitas pessoas gostam de gerar uma semente baseada no tempo atual ou algo assim.
 5
Author: suavidas, 2014-03-25 15:52:00
 #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.
 5
Author: Brahma, 2017-09-11 11:55:59
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])
>>>
 4
Author: Gour Bera, 2018-06-14 07:36:01

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
 3
Author: jack yang, 2017-02-27 10:11:10

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

Portanto, gerar um número aleatório não é realmente aleatório, porque ele roda em algoritmos. Algoritmos sempre dão a mesma saída com base na mesma entrada. Isto significa que depende do valor da semente. Assim, para torná-lo mais Aleatório, o tempo é automaticamente atribuído a seed().
 1
Author: abhay Maurya, 2018-09-15 09:46:13

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)
 0
Author: ateymuri, 2016-05-23 01:56:32
Aqui está o meu entendimento. Cada vez que definimos um valor de semente, um" rótulo "ou" referência " é gerado. O próximo Aleatório.a chamada de função é anexada a este "rótulo", então da próxima vez que você chamar o mesmo valor de semente e aleatório.função, ele lhe dará o mesmo resultado.
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
 0
Author: Vicky Miao, 2018-05-24 03:09:52