生成零周围的二项分布

时间:2013-03-22 14:11:40

标签: python random numpy distribution probability

我正在寻找生成二项式式分布。我想要二项分布,但我希望它以零为中心(我知道这对于二项分布的定义没有多大意义,但仍然是,这是我的目标。)

我在python中找到这个的唯一方法是:

def zeroed_binomial(n,p,size=None):
    return numpy.random.binomial(n,p,size) - n*p

这个发行版有真名吗?这段代码是否实际上给了我想要的东西(我怎么知道)?是否有更清洁/更好/规范/已实施的方式?

2 个答案:

答案 0 :(得分:2)

如果你想要一个以0为中心的“离散化”正态分布,你正在做什么就好了。如果你想要整数值,你应该在减去之前将n*p舍入。

但是当n变大且p远离0或1时limit of the binomial distribution is just the normal distribution n*p,因为{{1}}除了某些值之外不会是整数,为什么不只是使用正态分布?

答案 1 :(得分:2)

scipy.stats模块中实现的概率分布允许您通过在构造函数中指定loc关键字来任意移动分布。要获得平均值接近0的二项分布,可以调用

p = stats.binom(N, p, loc=-round(N*p))

(请务必使用带有离散分布的loc的整数值。)

以下是一个例子:

p = stats.binom(20, 0.1, loc=-2)
x = numpy.arange(-3,5)
bar(x, p.pmf(x))

bar plot

修改

要生成实际随机数,请使用rvs()模块中随机分布附带的scipy.stats方法。例如:

>>> stats.binom(20,0.1,loc=-2).rvs(10)
array([-2,  0,  0,  1,  1,  1, -1,  1,  2,  0])