我对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中的seed(a, version)用于初始化伪随机数生成器(PRNG)。

PRNG是一种生成近似于随机数性质的数列的算法。这些随机数可以使用种子值重新生成。因此,如果您提供种子值,PRNG将使用种子从任意的起始状态开始。

参数a是种子值。如果a值为None,则默认使用当前系统时间。

and version是一个整数,指定如何将参数a转换为整数。缺省值为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

因此,总的来说,如果您希望复制相同的随机数,请提供种子。确切地说,是同一颗种子。

其他回答

随机的。python中的seed(a, version)用于初始化伪随机数生成器(PRNG)。

PRNG是一种生成近似于随机数性质的数列的算法。这些随机数可以使用种子值重新生成。因此,如果您提供种子值,PRNG将使用种子从任意的起始状态开始。

参数a是种子值。如果a值为None,则默认使用当前系统时间。

and version是一个整数,指定如何将参数a转换为整数。缺省值为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

因此,总的来说,如果您希望复制相同的随机数,请提供种子。确切地说,是同一颗种子。

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
>>> 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 '将一个值提供给随机值生成器('random.randint()'),该生成器根据该种子生成这些值。随机数的一个必备属性是它们应该是可重复的。当你放入相同的种子,你会得到相同的随机数模式。通过这种方式,您可以从一开始就生成它们。你给出一个不同的种子——它以不同的首字母开始(上面3)。

给定一个种子,它会一个接一个地生成1到10之间的随机数。假设一个种子值有一组数字。

以下是我的理解。 每当我们设置一个种子值时,就会生成一个“标签”或“引用”。下一个随机。函数调用被附加到这个“标签”,所以下次你调用相同的种子值和随机。函数,会得到相同的结果。

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

下面是一个小测试,演示了给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)