2015-04-06 46 views
-2

我想根据根据二项式和指数分布生成数字

1)在[0,1]之间生成N(1000)数字。二项分布:对于二项分布,如果我使用s=np.random.binomial(10,0.5,1000)那么我得到的数字在1到10之间。有什么办法可以将它们限制在[0,1]

2)。指数分布:对于指数如果我使用:x=np.random.exponential(1,1000)那么我也无法获得[0,1]之间的数字

是否有某种方式可以根据我在python [0,1]之间生成浮点数到二项和指数分布。

回答

0

二项分布:

vcnt = 10  
s=np.random.binomial(vcnt,0.5,1000) 
s = [elem/float(vcnt) for elem in s] 

或者你也可以用做:

vcnt = 10  
s=np.random.binomial(vcnt,0.5,1000)/float(vcnt) 

你可以检查与结果:

print(max(s)) 
print(min(s)) 

指数分布,这是更复杂,因为指数分布的随机变量可以采用无限大(小)的值。

+0

好的谢谢。如果我想生成“N”个数字(而不是1000个),那么将使用哪个值。另外神奇(e-1)/ 9是如何来:)我也得到一个所有0的数组??这恐怕不应该是这种情况 – 2015-04-06 14:14:02

+0

如果生成“N”号码,代码将会相同。一般形式 vcnt = 10 s = np.random.binomial(vcnt,0.5,1000) s = [e/s] – kvorobiev 2015-04-06 14:21:06

+0

@Steg Verner请尝试我的答案中的新代码。 – kvorobiev 2015-04-06 14:23:41

0

1)没有办法在0和1之间生成二项分布式浮点数。为什么?因为在二项分布中,随机变量N =成功次数,因此每个定义一个整数。你可以做的是:

s = np.random.binomial(100, 0.5, size=1000)/100. 

编辑:或者等价形式:

s = np.random.binomial(100, 0.5, size=1000)/float(100) 

为了确保您一个浮动,而不是一个整数devide。

这将根据n(=试验次数)= 100,p = 0.5根据比例二项式分布为您提供0.xx形式的花车。你用这段代码得到了什么?对于每一个抽取的随机变量,你每次掷硬币100次,并在每次显示头部时将1加1(或者尾巴,因为你选择p为0.5)并不重要。由于这样的事实,头部和长度100的尾部的任何序列具有相同的概率(即P 1 100),您可以根据所有可能的组合数与分配结束:

http://en.wikipedia.org/wiki/Combination

你做什么除以100是你定义你的随机变量不加1时,头显示,但1/100。为了增加N到1000或10000,你会越来越接近的东西,可以用正态分布来近似:

http://en.wikipedia.org/wiki/Binomial_distribution#Normal_approximation

http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.normal.html#numpy.random.normal

注意p不应该是接近0或1为近似值。

2)在这里,你可能要像泊松分布:

http://en.wikipedia.org/wiki/Binomial_distribution#Poisson_approximation

http://en.wikipedia.org/wiki/Poisson_distribution

https://stats.stackexchange.com/questions/2092/relationship-between-poisson-and-exponential-distribution

+0

好的...但我得到一个0的数组 – 2015-04-06 14:18:44

+0

你写了100后面的点吗?点使浮点数超过100(这通常是python中的整数)。如果100保持一个整数,你的结果将是一个整数。 – 2015-04-06 14:23:07