Python 使用For循环重写numpy.random.二项式

Python 使用For循环重写numpy.random.二项式,python,numpy,statistics,Python,Numpy,Statistics,目前我有以下代码 def approx_binomial(n, p, size=None): gaussian = np.random.normal(n*p, n*p*(1-p), size=size) # Add the continuity correction to sample at the midpoint of each integral bin. gaussian += 0.5 if size is not None: binomia

目前我有以下代码

def approx_binomial(n, p, size=None):
    gaussian = np.random.normal(n*p, n*p*(1-p), size=size)
    # Add the continuity correction to sample at the midpoint of each integral bin.
    gaussian += 0.5
    if size is not None:
        binomial = gaussian.astype(np.int64)
    else:
        # scalar
        binomial = int(gaussian)
    return binomial
然而,它不是很精确,因为它使用随机函数。是否有其他方法可以使用for循环重写函数

我的另一个问题是如何显示概率质量函数与成功次数的关系图

def approx_binomial(n, p, size=None):
    gaussian = np.random.normal(n*p, n*p*(1-p), size=size)
    # Add the continuity correction to sample at the midpoint of each integral bin.
    gaussian += 0.5
    if size is not None:
        binomial = gaussian.astype(np.int64)
    else:
        # scalar
        binomial = int(gaussian)
    return binomial
plt.plot(n,p)
plt.show()

谢谢

可以在上找到解决任务的方法,但这是一个非常小的部分:

从二项分布生成随机样本的一种方法是 使用反演算法。要做到这一点,必须计算 P(X=k)对于从0到n的所有值k的概率。(这些 概率总和应接近1,以便 包围整个样本空间。)然后使用a生成0到1之间均匀的样本, 可以将计算出的样本U[0,1]转换为离散数 通过使用第一步中计算的概率

上面的内容有点冗长。简而言之,您必须执行以下操作才能从二项分布生成一个样本:使用概率质量函数
p=pmf(n,k)
计算每个可能的
k
的二项概率,并根据概率随机选择一个
k
s

  • 计算每个
    k=[0..n]
    的二项分布的累积密度函数
    cdf(n,k)
  • 在0和1之间生成均匀分布的随机数
    r

  • k
    的值,其中
    cdf(n,k)使用for循环从二项分布中获取随机样本的明显方法是:

    import random
    
    def binomial_random_sample(n, p):
        ret = 0
        for j in range(n):
            if random.random() < p:
                ret += 1
        return ret
    
    随机导入
    def二项随机样本(n,p):
    ret=0
    对于范围(n)内的j:
    如果是random.random()
    或者,如果您喜欢更简洁的方法:

    def binomial_random_sample(n, p):
        return sum(random.random() < p for j in range(n))
    
    def二项随机样本(n,p):
    返回和(random.random()
    1。你说函数不太准确是什么意思?该函数似乎应该返回随机样本。这里,随机性与准确性有什么关系?请在你的问题中更具体地说明你的期望和你得到的。2.第二个问题似乎与第一个问题相去甚远。请考虑把它们分开在两个柱子上,以便清晰。@我的意思是,我需要对Nuffy.Realth.二分法进行更精确的记录。我当前的代码中的值与使用上述函数时得到的值有很大不同。numpy的二项式有什么问题?你可以简单地使用它。@kazemakase这是交给我们的任务。这是重要的信息,你知道:)这个地方不是为了解决你的家庭作业,但我会努力为你指出正确的方向。给我一点时间。是的,过了一会儿我就明白了。无论如何谢谢你!