用python中的stats实现二项分布的随机实验

用python中的stats实现二项分布的随机实验,python,numpy,statistics,data-science,Python,Numpy,Statistics,Data Science,模拟一个抛硬币10000次的随机实验,并确定人头数。 提示:用n=1和p=0.5定义二项分布 使用来自scipy.stats的binom函数。 将随机种子设置为1 从定义的分布中抽取10000个元素的样本。 假设值0和1分别代表正面和反面。 计算磁头的数量并显示它。使用bincount方法,可在numpy中找到 我找到了一个答案,但它不是来自scipy.stats软件包,而是来自随机软件包。下面是我的尝试,但答案并不像预期的那样。请帮我改正我的错误 import scipy as sp from

模拟一个抛硬币10000次的随机实验,并确定人头数。
提示:用
n=1
p=0.5
定义二项分布
使用来自scipy.stats的binom函数。
将随机种子设置为
1

从定义的分布中抽取
10000个
元素的样本。
假设值
0
1
分别代表正面和反面。
计算磁头的数量并显示它。使用
bincount
方法,可在
numpy
中找到

我找到了一个答案,但它不是来自
scipy.stats
软件包,而是来自随机软件包。下面是我的尝试,但答案并不像预期的那样。请帮我改正我的错误

import scipy as sp
from scipy import stats
import numpy as np
import random

from scipy.stats import binom
data_binom = binom.rvs(n=1,p=0.5,size=10000)

np.random.seed(1)

#print(data_binom)

y = np.bincount(data_binom)
head = print(y[0])
print(head)

我得到了我所期望的。不知道哪个是头:4995还是5005

print(y[0])
print(y[1])

4995
5005
下面是更多的代码来解释您的抛掷:

from scipy.stats import binom
data_binom = binom.rvs(n=1,p=0.5,size=10000)

heads = 0
tails = 0
edges = 0
count = 0

for coin in data_binom:
    count += 1
    if coin == 1:
        heads += 1
    elif coin == 0:
        tails += 1
    else:
        edges += 1

print("Observed " + str(count) + " of coin tossing with heads " + str(heads)
      + ", tails " + str(tails) + ", and edges " + str(edges))
四项测试的结果:

$ python3.7 test.py
Observed 10000 of coin tossing with heads 4989, tails 5011, and edges 0
$ python3.7 test.py
Observed 10000 of coin tossing with heads 5109, tails 4891, and edges 0
$ python3.7 test.py 
Observed 10000 of coin tossing with heads 4968, tails 5032, and edges 0
$ python3.7 test.py 
Observed 10000 of coin tossing with heads 5046, tails 4954, and edges 0

似乎问题在于你在哪里设置种子。目前,您正在发布您的样本选择,理想情况下应在之前完成,如下所示:

import scipy as sp
from scipy import stats
import numpy as np
from scipy.stats import binom

np.random.seed(1)

data_binom = binom.rvs(n=1,p=0.5,size=10000)
#print(data_binom)

y = np.bincount(data_binom)
head = print(y[0])
print(head)
我猜这就是你期望的结果。干杯

from scipy.stats import binom
import numpy as np
b = binom(n=1,p=0.5)
np.random.seed(1)
sample = b.rvs(size=10000)
print(np.count_nonzero(sample==0)) # heads is assumed to be zero

此代码将在您的环境中工作。相信我

设置binom.rvs size=1,然后将头部的概率设置为.5

from scipy.stats import binom
flips=binom.rvs(1000,0.5,size=1)
print(flips)
plt.pie([flips,1000])
plt.legend(['heads','tails'])
plt.show()

head=print(y[0])-是您的错误。它将头分配给无。您需要类似于最后两行的内容:heads=y[0];尾部=y[1];印刷品(头);打印(尾巴)嗨,亚历山大。谢谢,我试过了,但不是预期的。请让我知道你是否绘制了任何其他歧义。你期望什么?我添加了代码示例并删除了“随机”以清除歧义。