我想根据根据二项式和指数分布生成数字
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]之间生成浮点数到二项和指数分布。
我想根据根据二项式和指数分布生成数字
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]之间生成浮点数到二项和指数分布。
二项分布:
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))
指数分布,这是更复杂,因为指数分布的随机变量可以采用无限大(小)的值。
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
好的...但我得到一个0的数组 – 2015-04-06 14:18:44
你写了100后面的点吗?点使浮点数超过100(这通常是python中的整数)。如果100保持一个整数,你的结果将是一个整数。 – 2015-04-06 14:23:07
好的谢谢。如果我想生成“N”个数字(而不是1000个),那么将使用哪个值。另外神奇(e-1)/ 9是如何来:)我也得到一个所有0的数组??这恐怕不应该是这种情况 – 2015-04-06 14:14:02
如果生成“N”号码,代码将会相同。一般形式 vcnt = 10 s = np.random.binomial(vcnt,0.5,1000) s = [e/s] – kvorobiev 2015-04-06 14:21:06
@Steg Verner请尝试我的答案中的新代码。 – kvorobiev 2015-04-06 14:23:41