繁体   English   中英

numpy.random 的 Generator 类和 np.random 方法有什么区别?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM