gpt4 book ai didi

python - 每当调用 rand() 时,是否会自动调用 numpy.random.RandomState()?

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:37 26 4
gpt4 key购买 nike

像 C++ 这样的语言要求程序员设置随机数生成器的种子,否则它的输出将永远相同。但是,像 numpy 这样的库不需要您手动初始化种子。

例如,代码如下:

from numpy.random import rand
rand()

每次都会给出不同的结果。

这是否意味着每次调用 rand 时都会调用 numpy.random.RandomState(seed=None)

最佳答案

Does that mean numpy.random.RandomState(seed=None) is called every time you call rand?

不,这意味着 RandomState在启动时播种一次。如果你每次打电话都重新播种 rand ,那么就没有办法显式请求可重复的模式。

Python 标准库的 random 也是如此。模块。

而且,不管你怎么说 C++,对于 C++ stdlib 的 <random> 也是正确的功能。

所有这些文件表明,如果您什么都不做,默认种子来自系统时间或系统熵生成器(如大多数 *nix 系统上的 /dev/random)。

C 的 rand 不是这种情况(它在 C++ 中仍然存在,尽管您应该将其视为已弃用*),但这只是因为 C 特意要求启动必须执行与调用 srand(1) 相同的操作.


如果您对“启动时一次”在 NumPy 中的确切工作原理感兴趣:

  • numpy.random 的顶层模块(它会在您第一次运行 import numpy.randomfrom numpy.random import something 时在您的代码中运行),它构建一个全局 RandomState , 使用默认参数(意思是 seed=None )。
  • RandomState的初始化器只是传递了 seed关于 seed 的争论方法。
  • RandomState.seed , 当用 None 调用时,为您的平台使用适当的系统熵源(如 /dev/urandom )。
  • 当您调用顶层时 rand , 它使用全局 RandomState .

* 不是因为这个问题;很容易记住调用srand在你的程序开始时。但是 PRNG 明确不保证周期长度长于 32767、无偏分布等对于几乎任何事情来说都是一个坏主意……

关于python - 每当调用 rand() 时,是否会自动调用 numpy.random.RandomState()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29937937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com