![](/img/trans.png)
[英]What's the difference between numpy.random vs numpy.random.Generate
[英]What is the difference between numpy.random's Generator class and np.random methods?
我一直在使用 numpy 的随机功能,通过调用np.random.choice()
或np.random.randint()
等方法。我刚刚发现了创建default_rng
对象或其他Generator
对象的能力:
from numpy.random import default_rng
gen = default_rng()
random_number = gen.integers(10)
到目前为止,我会一直使用
np.random.randint(10)
相反,我想知道这两种方式之间的区别是什么。
我能想到的唯一好处是跟踪多个种子,或者想要使用特定的 PRNG,但也许更通用的用例也存在差异?
numpy.random.*
函数(包括numpy.random.binomial
)利用在应用程序中共享的全局伪随机数生成器 (PRNG) 对象。 另一方面, default_rng()
是一个独立的 Generator 对象,它不依赖于全局状态。
如果您不关心应用程序中可重现的“随机性”,那么这两种方法暂时是等效的。 尽管NumPy 的新 RNG 策略一般不鼓励使用全局状态,但它并未弃用 1.17 版中的任何numpy.random.*
函数,尽管 NumPy 的未来版本可能会弃用。
另请注意,因为numpy.random.*
函数依赖于非线程安全的全局 PRNG 对象,如果您的应用程序使用多个线程,这些函数可能会导致竞争条件。 ( Generator
对象也不是线程安全的,但有一些方法可以通过多线程生成伪随机数,而无需跨线程共享 PRNG 对象。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.