我已经阅读了文档,但我仍然难以理解如何区分使用 的不同之处。
numpy.random.RandomState(0)
或者numpy.random.seed(0)
它们不都确保随机值选择过程在每次运行中都相同和一致吗?
numpy.random.seed(0)
会重新设置 numpy.random
命名空间下函数所使用的全局 RandomState
实例的状态。
numpy.random.RandomState(0)
返回一个新的、已经进行种子化的 RandomState
实例,但不会改变任何其他东西。您必须使用返回的 RandomState
实例才能获得一致的伪随机数。如果您使用 numpy.random
命名空间中的函数,则不会获得一致的伪随机数,因为它们使用的是与您刚创建的实例不同的 RandomState
实例。
如果您关心可重复性,最好将代码结构化以传递 RandomState
实例。全局状态很糟糕。参见:Consistenly create same random numpy array