как сделать так, чтобы это моделирование распределения выборки означало быстрее - PullRequest
0 голосов
/ 23 февраля 2019

Я имитирую подбрасывание 999 монет 1000 раз и рисую распределение выборочного среднего, которое может занять много времени (около 21 секунды).Есть лучший способ сделать это?например, более быстрый способ запустить цикл.будет ли полезна векторизация?

import datetime
import numpy as np

sample_mean_dis = []
start_time = datetime.datetime.now()
# to draw a distribution of sample mean
for i in range(1000):
    if not (i%100):
        print('iterate: ', i)
    sums_1000coins = []
    # simulate 1k repetition of experiment_1
    # and consider this opertation as a sample
    # and compute the sample mean
    for i in range(1000):
        # this is simulating experiment_1 which flip 999 coins
        # and sum heads
        coins = np.random.randint(2, size=999)
        sums_1000coins.append(np.sum(1 == coins))
    sample_mean_dis.append(np.mean(sums_1000coins))
end_time = datetime.datetime.now()
elapsedTime = end_time - start_time
print("Elapsed time: %d seconds" % (elapsedTime.total_seconds()))

1 Ответ

0 голосов
/ 23 февраля 2019

Чтобы подбросить 999 монет и посмотреть, какие головы выпадут, прочитайте 999 бит случайных данных (бит может быть либо 0, либо 1 с вероятностью 50/50, как монета)а затем подсчитайте, сколько битов установлено в 1.

import random
bin(random.getrandbits(999)).count("1")

. Возможно, приведенное выше вернет число, близкое к 499,5

Чтобы перевернуть 999 монет 1000 развыполните вышеописанное в цикле for:

num_heads = [bin(random.getrandbits(999)).count("1") for _ in range(1000)]

num_heads будет список из 1000 целых чисел , нормально распределенный около 499,5 (999/2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...