用python中的stats实现二项分布的随机实验
模拟一个抛硬币10000次的随机实验,并确定人头数。用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
提示:用
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];印刷品(头);打印(尾巴)嗨,亚历山大。谢谢,我试过了,但不是预期的。请让我知道你是否绘制了任何其他歧义。你期望什么?我添加了代码示例并删除了“随机”以清除歧义。