Willekeurig. Seeed (): Wat doet het?

Ik ben een beetje in de war op wat random.seed()doet in Python. Waarom doen de onderstaande beproevingen bijvoorbeeld wat ze (consequent) doen?

>>> 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

Ik kon hier geen goede documentatie vinden.


Antwoord 1, Autoriteit 100%

Pseudo-willekeurige nummergeneratoren werken door een bedrijf op een waarde uit te voeren. Over het algemeen is deze waarde het vorige aantal gegenereerd door de generator. De eerste keer dat u de generator gebruikt, is er echter geen vorige waarde.

Een pseudo-willekeurige nummergenerator geeft het zijn eerste “vorige” waarde. Elke zaadwaarde komt overeen met een sequentie van gegenereerde waarden voor een bepaalde willekeurige getalgenerator. Dat wil zeggen, als je twee keer hetzelfde zaad bezorgt, krijg je twee keer dezelfde reeks cijfers.

Over het algemeen wilt u uw willekeurige nummergenerator zaaien met enige waarde die elke uitvoering van het programma zal wijzigen. De huidige tijd is bijvoorbeeld een veelgebruikt zaad. De reden waarom dit niet automatisch gebeurt, is zo dat als u wilt, u een specifiek zaad kunt geven om een ​​bekende reeks cijfers te krijgen.


Antwoord 2, Autoriteit 41%

Alle andere antwoorden lijken niet het gebruik van willekeurig te verklaren. Seeed ().
Hier is een eenvoudig voorbeeld (bron ):

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

Antwoord 3, autoriteit 18%

>>> 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

Je probeert dit.

Stel dat ‘random.seed’ een waarde geeft aan de generator voor willekeurige waarden (‘random.randint()’) die deze waarden genereert op basis van deze seed. Een van de belangrijkste eigenschappen van willekeurige getallen is dat ze reproduceerbaar moeten zijn. Als je dezelfde seed plaatst, krijg je hetzelfde patroon van willekeurige getallen. Zo genereer je ze vanaf het begin. Je geeft een ander zaadje – het begint met een andere initiaal (boven 3).

Gegeven een seed, zal het willekeurige getallen tussen 1 en 10 na elkaar genereren. U gaat dus uit van één reeks getallen voor één startwaarde.


Antwoord 4, autoriteit 7%

Een willekeurig getalwordt gegenereerd door een bewerking op de vorige waarde.

Als er geen vorige waarde is, wordt automatisch de huidige tijd als vorige waarde genomen. We kunnen deze vorige waarde zelf leveren met behulp van random.seed(x)waarbij xeen willekeurig getal of tekenreeks enz. kan zijn.

Daarom is random.random()eigenlijk geen perfect willekeurig getal, het kan worden voorspeld via 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

Vandaar het genereren van een willekeurig getal is niet daadwerkelijk willekeurig, omdat het op algoritmen loopt. Algoritmen geven altijd dezelfde uitvoer op basis van dezelfde ingang. Dit betekent dat het afhangt van de waarde van het zaad. Dus om het meer willekeurig te maken, wordt de tijd automatisch toegewezen aan seed().


Antwoord 5, Autoriteit 6%

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])
>>>

Antwoord 6, Autoriteit 5%

# Simple Python program to understand random.seed() importance
import random
random.seed(10)
for i in range(5):    
    print(random.randint(1, 100))

Voer het bovenstaande programma meerdere keren uit…

Eerste poging: drukt 5 willekeurige gehele getallen af in het bereik van 1 – 100

2e poging: print dezelfde 5 willekeurige getallen als in de bovenstaande uitvoering.

Derde poging: zelfde

…..Zo verder

Uitleg: Elke keer dat we het bovenstaande programma uitvoeren, stellen we seed in op 10, waarna de willekeurige generator dit als referentievariabele neemt. En dan door een vooraf gedefinieerde formule uit te voeren, genereert het een willekeurig getal.

Vandaar dat het instellen van seed op 10 in de volgende uitvoering het referentienummer opnieuw op 10 zet en opnieuw begint hetzelfde gedrag…

Zodra we de zaadwaarde resetten geeft het dezelfde planten.

Opmerking: verander de seed-waarde en voer het programma uit, je ziet een andere willekeurige volgorde dan de vorige.


Antwoord 7, autoriteit 3%

In dit geval is willekeurig eigenlijk pseudo-willekeurig. Gegeven een seed, zal het getallen genereren met een gelijke verdeling. Maar met dezelfde seed genereert het elke keer dezelfde nummerreeks. Als je wilt dat het verandert, moet je je zaad veranderen. Veel mensen vinden het leuk om een seed te genereren op basis van de huidige tijd of zoiets.


Antwoord 8, autoriteit 3%

Imho, het wordt gebruikt om hetzelfde willekeurige cursusresultaat te genereren wanneer je random.seed(samedigit)opnieuw gebruikt.

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

Antwoord 9, autoriteit 2%

Stel de seed(x)in voordat u een reeks willekeurige getallen genereert en gebruik dezelfde seed om dezelfde reeks willekeurige getallen te genereren. Handig bij het reproduceren van de problemen.

>>> 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
>>> 

Antwoord 10

Hier is mijn begrip.
Elke keer dat we een seed-waarde instellen, wordt een “label” of “referentie” gegenereerd. De volgende random.function-aanroep wordt aan dit “label” gekoppeld, dus de volgende keer dat u dezelfde seed-waarde en random.function aanroept, krijgt u hetzelfde resultaat.

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

Antwoord 11

random.seed(a, version)in python wordt gebruikt om de pseudo-random number generator (PRNG)te initialiseren.

PRNG is een algoritme dat een reeks getallen genereert die de eigenschappen van willekeurige getallen benadert. Deze willekeurige getallen kunnen worden gereproduceerd met behulp van de startwaarde. Dus als u een seed-waarde opgeeft, begint PRNG vanuit een willekeurige startstatus met behulp van een seed.

Argument ais de startwaarde. Als de a-waarde Noneis, wordt standaard de huidige systeemtijd gebruikt.

en versionis een geheel getal dat aangeeft hoe de parameter a moet worden omgezet in een geheel getal. Standaardwaarde is 2.

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

Als je wilt dat hetzelfde willekeurige getal wordt gereproduceerd, geef dan opnieuw dezelfde seedop

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

Als u de seed niet opgeeft, genereert deze een ander nummer en niet 1 zoals voorheen

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

Als je andere seed opgeeft dan voorheen, dan krijg je een ander willekeurig getal

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

Dus, samengevat, als je wilt dat hetzelfde willekeurige getal wordt gereproduceerd, geef dan de seed op. In het bijzonder hetzelfde zaad.


Antwoord 12

Hier is een kleine test die aantoont dat het invoeren van de methode seed()met hetzelfde argument hetzelfde pseudo-willekeurige resultaat zal opleveren:

# 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)

Other episodes