我正在寻找生成二项式式分布。我想要二项分布,但我希望它以零为中心(我知道这对于二项分布的定义没有多大意义,但仍然是,这是我的目标。)
我在python中找到这个的唯一方法是:
def zeroed_binomial(n,p,size=None):
return numpy.random.binomial(n,p,size) - n*p
这个发行版有真名吗?这段代码是否实际上给了我想要的东西(我怎么知道)?是否有更清洁/更好/规范/已实施的方式?
答案 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))
修改强>
要生成实际随机数,请使用rvs()
模块中随机分布附带的scipy.stats
方法。例如:
>>> stats.binom(20,0.1,loc=-2).rvs(10)
array([-2, 0, 0, 1, 1, 1, -1, 1, 2, 0])