什么是与NumPy获得随机数的最佳方式?(What is the best way of getti

2019-06-26 13:05发布

我想在的范围内生成随机数-1, 1 ,并希望每一个以具有被产生相等的概率。 即我不想极端是不太可能出现。 什么是这样做的最佳方式?

到目前为止,我已经使用:

2 * numpy.random.rand() - 1

并且:

2 * numpy.random.random_sample() - 1

Answer 1:

你的做法是好的。 另一种方法是使用函数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])

关于对极端的可能性:如果这将是理想化的,连续的随机数,以获得极限的一个可能性是0。由于浮点数是连续的实数离散,在realitiy有一些积极的概率得到一些极端的。 这是某种形式的离散错误的,而且几乎可以肯定,这个错误会在你的模拟其他错误被dwarved。 别担心!



Answer 2:

需要注意的是numpy.random.rand允许在一个调用生成均匀分布的多个样本:

>>> np.random.rand(5)
array([ 0.69093485,  0.24590705,  0.02013208,  0.06921124,  0.73329277])

它也允许在生成给定的形状的样品:

>>> np.random.rand(3,2)
array([[ 0.14022471,  0.96360618], 
       [ 0.37601032,  0.25528411], 
       [ 0.49313049,  0.94909878]])

如你说,均匀[-1之间分布的随机数,1)可与所生成的:

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


Answer 3:

从文档numpy.random.random_sample

结果是从在规定的间隔中的“连续均匀”分布。 采样UNIF [A,B)中,B> A乘以输出random_sample的(ba)并添加a

  (b - a) * random_sample() + a 

每斯文Marnach的答案,该文档可能需要更新引用numpy.random.uniform



文章来源: What is the best way of getting random numbers in NumPy?