我对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
我找不到这方面的好文档。
伪随机数生成器通过对值执行一些操作来工作。通常,此值是生成器生成的前一个数字。但是,第一次使用生成器时,没有以前的值。
为伪随机数生成器做种子会为其提供第一个“前一个”值。每个种子值将对应于给定随机数生成器的一系列生成值。也就是说,如果你提供相同的种子两次,你将获得两次相同的数字序列。
通常,你希望为随机数生成器设置一些值,该值会改变程序的每次执行。例如,当前时间是一个经常使用的种子。这不会自动发生的原因是,如果你愿意,你可以提供特定的种子来获得已知的数字序列。
可能值得一提的是,有时我们想要提供种子,以便在程序的每次运行中生成相同的随机序列。有时,避免软件程序中的随机性以保持程序行为的确定性和重现问题/错误的可能性。
遵循@ViFI 所说的,保持程序行为的确定性(使用固定的种子或固定的种子序列)还可以让您更好地评估对程序进行的某些更改是否有益。
你介意用一些现实生活场景来解释吗?我无法理解相同的用例。我们在其他编程语言中是否也有类似的东西?
这里有一个真实的生活场景:stackoverflow.com/questions/5836335/...。随机种子也很常见,可以为研究创造可重复的结果。例如,如果您是一名数据科学家,并且您想使用某种使用随机性的模型(例如随机森林)发布您的结果,您需要在您发布的代码中包含一个种子,以便人们可以确保您的计算是可重复的。
所以种子确实可以以我们想要的方式去随机化随机函数......?