首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化“抛硬币”实验模拟

优化“抛硬币”实验模拟
EN

Stack Overflow用户
提问于 2017-11-04 02:17:29
回答 2查看 115关注 0票数 0

我想优化我写的模拟。我将提供我创建的代码,然后我将解释我想要实现的主要思想:

代码语言:javascript
复制
for exp_itrs in range(99999):
    coin_flips = np.zeros((1000,10))
    for toss in range(999):
        toss_10 = np.random.randint(0,2,size = (10))
        coin_flips[toss] = toss_10

其总体思路是运行下面的实验模拟100,000次:抛出1000枚硬币,每个硬币10次。使用一个大小为(1000,10)的数值矩阵来记录每个实验(行代表硬币,每列是一次掷硬币)。

现在,我的PC大约需要5分钟来运行这个简单的代码。

EN

回答 2

Stack Overflow用户

发布于 2017-11-04 02:33:52

理想情况下,可以这样做:

代码语言:javascript
复制
import numpy as np
experiment = np.random.randint(0, 2, (100000, 1000, 10), dtype=np.uint8)

注意,这只需要100000*1000*10*1e-9 =1 1e

在行动中:

代码语言:javascript
复制
>>> import numpy as np
>>> experiment = np.random.randint(0, 2, (100000, 1000, 10), dtype=np.uint8)
>>> means = experiment.mean(axis=(0,1))
>>> means
array([ 0.50002927,  0.49993242,  0.5000543 ,  0.49999995,  0.49997455,
        0.49999587,  0.4999641 ,  0.4999488 ,  0.50001366,  0.50000301])
>>> experiment.nbytes
1000000000
>>> experiment.nbytes * 1e-9 # plenty of RAM to spare
1.0

在我相对普通的笔记本电脑上:

代码语言:javascript
复制
>>> timeit.timeit("experiment = np.random.randint(0, 2, (100000, 1000, 10), dtype=np.uint8)", "import numpy as np", number=10)
29.73300809401553
>>> _ / 10
2.973300809401553 # seconds per experiment
票数 1
EN

Stack Overflow用户

发布于 2017-11-04 02:33:33

您可以使用numpy.random.rand创建一个由0 <= x< 1的随机值组成的矩阵,然后使用<0.5的treshold将其作为值0或1的别名。

代码语言:javascript
复制
numpy.random.rand(10000, 1000, 10)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47102190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档