我想根据
在[0,1]之间生成N(1000)个数字 1)。二项分布:对于二项式分布,如果我使用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 :(得分: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)无法在0和1之间生成二项式分布式浮点数。为什么?因为在二项分布中,随机变量N =成功的次数,因此每个定义是一个整数。你能做的是:
s = np.random.binomial(100, 0.5, size=1000)/100.
编辑:或者等效形式:
s = np.random.binomial(100, 0.5, size=1000)/float(100)
确保您使用浮点而不是整数。
这将根据缩放的二项分布给出75x形式的浮点数,其中n(=试验次数)= 100,p = 0.5。你对这段代码有什么看法?对于绘制的每个随机变量,您每次翻转一个硬币100次,并在每次显示头部时添加1到一个计数器(或尾部,因为您选择p为0.5,所以不重要)。由于长度为100的任何头部和尾部序列具有相同的概率(即p ^ 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