#python #numpy #statistics #data-science
#python #numpy #Статистика #наука о данных
Вопрос:
Имитируйте случайный эксперимент по подбрасыванию монеты 10000 раз и определите количество орлов.
Подсказка: Определите биномиальное распределение с помощью n = 1
и p = 0.5
.
Используйте функцию binom из scipy.stats.
Установите случайное начальное значение в 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)
Комментарии:
1. head = print(y[0]) — это ваша ошибка. Он присваивает head значение None. Вместо двух последних строк вам нужно что-то вроде: орел = y[0]; решка = y[1]; печать (орел); печать (решка)
2. Привет, Александр. Спасибо, я пробовал это, но это не то, что ожидалось. Пожалуйста, дайте мне знать, если вы обнаружите какую-либо другую двусмысленность.
3. Чего вы ожидали?
4. Я добавил пример кода и удалил ‘random’, чтобы устранить двусмысленность.
Ответ №1:
Похоже, проблема в том, где вы настраиваете начальное значение. В настоящее время вы делаете это, опубликуйте свой выборочный выбор, который в идеале должен быть выполнен раньше, как показано ниже :
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)
Думаю, это ваш ожидаемый результат. Приветствия!!
Ответ №2:
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
Этот код будет работать в вашей среде. Поверьте мне!
Ответ №3:
Я получил то, что ожидал. Не знаете, какой из них 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
Ответ №4:
установите размер binom.rvs = 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()