3

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

我发现在 python 中这样做的唯一方法是:

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

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

4

2 回答 2

2

如果你想要一个以 0 为中心的“离散”正态分布,你正在做的事情很好。如果你想要整数值,你应该n*p在减去之前四舍五入。

但是二项分布的极限只是n变大并且有p界远离0或1时的正态分布。既然n*p除了某些值之外不会是整数,为什么不直接使用正态分布呢?

于 2013-03-22T15:27:09.890 回答
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))

条形图

编辑:

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

>>> stats.binom(20,0.1,loc=-2).rvs(10)
array([-2,  0,  0,  1,  1,  1, -1,  1,  2,  0]) 
于 2013-03-22T20:32:55.863 回答