Python numpy.random和#x27;s生成器类和np.random方法?

Python numpy.random和#x27;s生成器类和np.random方法?,python,numpy,random,numpy-random,Python,Numpy,Random,Numpy Random,我使用numpy的随机功能已有一段时间了,方法是调用np.random.choice()或np.random.randint()等。 我刚刚发现了创建default\rng对象或其他对象的能力: 到目前为止,我会一直使用 np.random.randint(10) 相反,我想知道这两种方式之间的区别是什么 我能想到的唯一好处是跟踪多个种子,或者希望使用特定的PRNG,但对于更通用的用例,可能也存在差异?numpy.random.*函数(包括numpy.random.binomial)使用在整个

我使用numpy的随机功能已有一段时间了,方法是调用
np.random.choice()
np.random.randint()等。
我刚刚发现了创建
default\rng
对象或其他对象的能力:

到目前为止,我会一直使用

np.random.randint(10)
相反,我想知道这两种方式之间的区别是什么


我能想到的唯一好处是跟踪多个种子,或者希望使用特定的PRNG,但对于更通用的用例,可能也存在差异?

numpy.random.*
函数(包括
numpy.random.binomial
)使用在整个应用程序中共享的全局随机生成器对象。另一方面,
default\u rng()
是一个独立的生成器对象,不依赖于全局状态

如果您不关心应用程序中可再现的“随机性”,那么这两种方法暂时是等效的。尽管总体上不鼓励使用全局状态,但它没有反对版本1.17中的任何
numpy.random.*
函数,尽管将来的numpy版本可能会这样做


还要注意的是,由于
numpy.random.*
函数依赖于一个全局随机生成器对象,该对象不是线程安全的,因此如果应用程序使用多个线程,则这些函数将失效。(
Generator
对象也不是线程安全的,但是有一些方法可以实现,而不需要跨线程共享随机生成器对象。)

randint
np的其他函数。现在不推荐使用随机生成器。能够使用多个独立的随机数流是它们的优点之一,但生成器也允许您在不同的随机数流之间进行选择,甚至可以实现自己的随机数流,因此它更灵活,也可能使再现性更容易。再现性和灵活性参数确实有意义,虽然我猜编写自己的位生成器主要局限于加密应用程序?是的,我想说的是,它局限于非常特定的应用程序、研究/研究或特定的情况,在这些情况下,您试图精确匹配其他软件的行为。这是否回答了您的问题@彼得罗。不完全是,我确实理解这个用法,我想知道是否有一些潜在的差异,我应该注意一下。或者切换到新界面是否有任何不明显的好处,等等。
np.random.randint(10)