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

Pat*_* Li 4 python random numpy

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

import numpy as np
np.random.binomial(10, 0.3, 5)
Run Code Online (Sandbox Code Playgroud)

但是,NumPy 参考页面显示类似

from numpy.random import default_rng
rg = default_rng()
rg.binomial(10, 0.3, 5)
Run Code Online (Sandbox Code Playgroud)

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

Pet*_* O. 7

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

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

请注意,numpy.random.binomial(除了其他numpy.random.*函数)现在是 NumPy 1.17 的遗留函数;NumPy 1.17 引入了一个新的随机数生成系统,在您问题的第二个代码块中进行了演示。这是改变 RNG 政策提议的结果。避免全局状态的愿望是更改此策略的原因之一。