在NumPy中获得随机数的最佳方式是什么?
我想要生成-1, 1
范围内的随机数字,并且希望每个数字具有相同的生成概率。即我不希望极端不太可能出现。这样做的最好方法是什么?在NumPy中获得随机数的最佳方式是什么?
到目前为止,我已经使用:
2 * numpy.random.rand() - 1
也:
2 * numpy.random.random_sample() - 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。由于浮点数是实际上连续实数的离散化,实际上有一些积极的可能性来获得一些极值。这是某种形式的离散化错误,几乎可以肯定的是,这个错误将会在你的模拟中被其他错误所摧毁。别担心!
从文档numpy.random.random_sample
:
结果来自在规定的间隔中的“连续均匀”分布。采样UNIF [A,B)中,b>一个通过
(b-a)
相乘random_sample的输出,并添加a
:(b - a) * random_sample() + a
每斯文Marnach的回答,该文档可能需要更新参考numpy.random.uniform
。
是的,那是我先检查的地方。谢谢。 – wot 2012-07-26 16:14:11
注意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])
你有没有你使用的方法有什么问题? – 2012-07-26 15:48:55
@ Sven问题是,我不能确定极端情况与所有其他可能性一样可能被选择。 – wot 2012-07-26 15:51:41