random.seed():它做了什么?

问题描述 投票:147回答:11

我对random.seed()在Python中的作用有点困惑。例如,为什么下面的试验会做他们所做的(始终如一)?

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

我找不到关于此的好文档。

python random random-seed
11个回答
178
投票

伪随机数生成器通过对值执行某些操作来工作。通常,此值是生成器生成的先前数字。但是,第一次使用生成器时,没有先前的值。

播种伪随机数生成器为其提供其第一个“前一个”值。每个种子值将对应于给定随机数发生器的生成值序列。也就是说,如果您提供两次相同的种子,则会获得两次相同的数字序列。

通常,您希望为随机数生成器设置一些值,该值将更改程序的每次执行。例如,当前时间是经常使用的种子。这种情况不会自动发生的原因是,如果您愿意,您可以提供特定的种子来获得已知的数字序列。


1
投票

在生成一组随机数之前设置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
>>> 

0
投票

这是我的理解。每次设置种子值时,都会生成“标签”或“参考”。下一个random.function调用附加到此“标签”,因此下次调用相同的种子值和random.function时,它会给出相同的结果。

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

79
投票

所有其他答案似乎都没有解释random.seed()的使用。这是一个简单的例子(source):

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

26
投票
>>> 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

你试试这个。假设'random.seed'给随机值生成器('random.randint()')赋值,该值基于该种子生成这些值。随机数的必要属性之一是它们应该是可再现的。一旦你把相同的种子,你得到相同的随机数模式。所以你从一开始就生成它们。你给它一个不同的种子,它以不同的初始(3以上)开始。

你已经给了一个种子,现在它会一个接一个地生成1到10之间的随机数。因此,您可以为一个种子值假设一组数字。


11
投票

通过对先前值的某些操作生成随机数。

如果没有先前的值,则自动将当前时间作为先前值。我们可以通过自己使用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()


8
投票
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])
>>>

7
投票
# Simple Python program to understand random.seed() importance

import random

random.seed(10)

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

多次执行上述程序......

第一次尝试:打印5个随机整数,范围为1 - 100

第二次尝试:打印出上述执行中出现的相同的5个随机数。

第三次尝试:相同

.....所以

说明:每次运行上面的程序时,我们都将seed设置为10,然后随机生成器将其作为引用变量。然后通过做一些预定义的公式,它会生成一个随机数。

因此,在下一次执行中将种子设置为10再次将参考编号设置为10并再次开始相同的行为...

一旦我们重置种子值,它就会给出相同的植物。

注意:更改种子值并运行程序,您将看到与前一个不同的随机序列。


6
投票

在这种情况下,random实际上是伪随机的。给定种子,它将生成具有相等分布的数字。但是使用相同的种子,它每次都会生成相同的数字序列。如果你想改变它,你将不得不改变你的种子。很多人喜欢根据当前时间或某事生成种子。


4
投票

Imho,当你再次使用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

1
投票

这是一个小测试,证明用相同的参数输入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)
© www.soinside.com 2019 - 2024. All rights reserved.