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)
李>
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这是交给我们的任务。这是重要的信息,你知道:)这个地方不是为了解决你的家庭作业,但我会努力为你指出正确的方向。给我一点时间。是的,过了一会儿我就明白了。无论如何谢谢你!