2012-07-26 61 views
18

我想要生成-1, 1范围内的随机数字,并且希望每个数字具有相同的生成概率。即我不希望极端不太可能出现。这样做的最好方法是什么?在NumPy中获得随机数的最佳方式是什么?

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

2 * numpy.random.rand() - 1 

也:

2 * numpy.random.random_sample() - 1 
+2

你有没有你使用的方法有什么问题? – 2012-07-26 15:48:55

+0

@ Sven问题是,我不能确定极端情况与所有其他可能性一样可能被选择。 – wot 2012-07-26 15:51:41

回答

27

你的做法是好的。另一种方法是使用功能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。由于浮点数是实际上连续实数的离散化,实际上有一些积极的可能性来获得一些极值。这是某种形式的离散化错误,几乎可以肯定的是,这个错误将会在你的模拟中被其他错误所摧毁。别担心!

+0

@wok:添加了对极值的评论。 – 2012-07-26 15:59:31

+0

谢谢Sven。我会尽量不要担心:-)但是说起来容易做起来难。 – wot 2012-07-26 16:05:44

+0

请注意,在这两种方法中,间隔是半开放的,所以上界将以概率0产生。 – ecatmur 2012-07-26 16:34:27

2

从文档numpy.random.random_sample

结果来自在规定的间隔中的“连续均匀”分布。采样UNIF [A,B)中,b>一个通过(b-a)相乘random_sample的输出,并添加a

(b - a) * random_sample() + a 

每斯文Marnach的回答,该文档可能需要更新参考numpy.random.uniform

+0

是的,那是我先检查的地方。谢谢。 – wot 2012-07-26 16:14:11

3

注意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]) 
相关问题