生成围绕z的二项分布

2024-10-04 05:21:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我发现在python中执行此操作的唯一方法是:

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

这个发行版有真名吗?这段代码真的给了我想要的吗(我怎么知道)?有没有更干净/更好/规范/已经实现的方法?在


Tags: 方法代码numpy规范none目标sizereturn
2条回答

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

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

(请确保对离散分布的loc使用整数值。)

下面是一个例子:

^{pr2}$

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]) 

如果你想要一个以0为中心的“离散化”正态分布,你所做的一切都很好。如果你想要整数值,你应该在减法之前取整n*p。在

但是当n变大并且p远离0或1时,limit of the binomial distribution is just the normal distribution会变大。既然除了某些值,n*p不是一个整数,为什么不直接使用正态分布呢?在

相关问题 更多 >