在NumPy中获取随机数的最佳方法是什么?

wot*_*wot 22 python random numpy

我想在该范围内生成随机数,-1, 1并希望每个人都有相同的生成概率.即我不希望极端情况不太可能出现.这样做的最佳方式是什么?

到目前为止,我使用过:

2 * numpy.random.rand() - 1
Run Code Online (Sandbox Code Playgroud)

并且:

2 * numpy.random.random_sample() - 1
Run Code Online (Sandbox Code Playgroud)

Sve*_*ach 32

你的方法很好.另一种方法是使用该功能numpy.random.uniform():

>>> numpy.random.uniform(-1, 1, size=10)
array([-0.92592953, -0.6045348 , -0.52860837,  0.00321798,  0.16050848,
       -0.50421058,  0.06754615,  0.46329675, -0.40952318,  0.49804386])
Run Code Online (Sandbox Code Playgroud)

关于极端的概率:如果它是理想化的,连续的随机数,得到一个极值的概率将为0.由于浮点数是连续实数的离散化,实际上有一些正概率得到一些极端.这是某种形式的离散化错误,几乎可以肯定,这种错误会因模拟中的其他错误而相形见绌.别担心!


Ado*_*obe 5

请注意,numpy.random.rand允许在一次调用中从均匀分布生成多个样本:

>>> np.random.rand(5)
array([ 0.69093485,  0.24590705,  0.02013208,  0.06921124,  0.73329277])
Run Code Online (Sandbox Code Playgroud)

它还允许生成给定形状的样本:

>>> np.random.rand(3,2)
array([[ 0.14022471,  0.96360618], 
       [ 0.37601032,  0.25528411], 
       [ 0.49313049,  0.94909878]])
Run Code Online (Sandbox Code Playgroud)

正如您所说,[-1, 1) 之间均匀分布的随机数可以通过以下方式生成:

>>> 2 * np.random.rand(5) - 1
array([ 0.86704088, -0.65406928, -0.02814943,  0.74080741, -0.14416581])
Run Code Online (Sandbox Code Playgroud)