如何使用numpy.random从某个分布生成随机数?


问题内容

对于如何使用numpy.random从给定分布(例如,二项式)生成随机值,我有些困惑。我以为会

import numpy as np
np.random.binomial(10, 0.3, 5)

但是,NumPy参考页显示类似

from numpy.random import default_rng
rg = default_rng()
rg.binomial(10, 0.3, 5)

两者似乎都运行良好。哪个是正确或更好的方法?如果有什么区别?


问题答案:

代码的第一块使用一个numpy.random.*函数。numpy.random.*函数(包括numpy.random.binomial)利用了在应用程序之间共享的全局随机生成器对象。

第二个代码块使用创建一个随机生成器对象,default_rng()并使用该对象生成随机数,而无需依赖全局状态。

请注意,numpy.random.binomial(除其他numpy.random.*功能之外)现在是NumPy 1.17的遗留功能;NumPy
1.17引入了一个新的随机数生成系统,该系统将在您问题的第二段代码中进行演示。这是改变RNG政策提议的结果。避开全球国家的愿望是改变这一政策的原因之一。