我对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
我找不到关于这方面的好的文件。
>>> 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之间的随机数。假设一个种子值有一组数字。
一个随机数是通过对前一个值进行操作而生成的。
如果没有之前的值,则当前时间将自动作为之前的值。我们可以使用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()。
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])
>>>