gpt4 book ai didi

python - Python 中 numpy.random 和 random.random 的区别

转载 作者:行者123 更新时间:2023-11-28 19:07:10 31 4
gpt4 key购买 nike

我有一个 Python 大脚本。我在其他人的代码中启发了自己,所以我最终使用 numpy.random 模块来做一些事情(例如创建一个从二项分布中获取的随机数数组),在其他地方我使用模块 random.random.

谁能告诉我两者之间的主要区别?查看这两者的文档网页,在我看来 numpy.random 只是有更多的方法,但我不清楚随机数的生成有何不同。

我问的原因是因为我需要为我的主程序播种以进行调试。但除非我在我导入的所有模块中使用相同的随机数生成器,否则它不起作用,这是正确的吗?

此外,我在另一篇文章中读到过关于不使用 numpy.random.seed() 的讨论,但我真的不明白为什么这是个坏主意。如果有人向我解释为什么会这样,我将不胜感激。

最佳答案

您已经做出了许多正确的观察!

除非您想要为两个随机生成器提供种子,否则从长远来看,选择一个或另一个生成器可能更简单。但是,如果您确实需要同时使用两者,那么是的,您还需要同时为它们播种,因为它们会生成彼此独立的随机数。

对于 numpy.random.seed(),主要的困难是它不是线程安全的——也就是说,如果你有 many different threads of execution,使用它是不安全的,因为如果两个不同的线程同时执行该函数,则不能保证工作。如果您不使用线程,并且可以合理地预期将来不需要以这种方式重写程序,则 numpy.random.seed() 应该没问题。如果有任何理由怀疑您将来可能需要线程,从长远来看,按照建议进行操作会更安全,并且 make a local instance of the numpy.random.Random class .据我所知,random.random.seed() 是线程安全的(或者至少,我没有找到任何相反的证据)。

numpy.random 库包含一些额外的常用于科学研究的概率分布,以及一些用于生成随机数据数组的便利函数。 random.random 库更轻量一些,如果您不从事科学研究或其他类型的统计工作,应该没问题。

否则,他们都使用 Mersenne twister sequence生成它们的随机数,它们都是完全确定的——也就是说,如果你知道一些关键信息,就可以绝对确定地预测 what number will come next .因此,numpy.random 和 random.random 都不适合任何 serious cryptographic uses .但是因为序列非常非常长,所以在您不担心有人试图对您的数据进行逆向工程的情况下,两者都可以很好地生成随机数。这也是需要为随机值设置种子的原因 - 如果您每次都从同一个地方开始,您将始终获得相同的随机数序列!

作为旁注,如果您确实需要加密级别的随机性,您应该使用 secrets模块,或类似 Crypto.Random 的东西如果您使用的是 Python 3.6 之前的 Python 版本。

关于python - Python 中 numpy.random 和 random.random 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45642865/

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