【发布时间】:2014-02-17 13:21:23
【问题描述】:
如何在 NumPy 中对这个循环进行矢量化?它使用来自 NumPy 的 binomial() 函数的采样来估计在 55 个事件中恰好发生特定类型的 m 的概率,其中 m 发生的概率为 5%;即它估计55Cm.(0.05)^m.(0.95)^(55-m)。其中 55Cm = 55!/(m!.(55-m)!)
import numpy as np
M = 7
m = np.arange(M+1)
ntrials = 1000000
p = np.empty(M+1)
for r in m:
p[r] = np.sum(np.random.binomial(55, 0.05, ntrials)==r)/ntrials
【问题讨论】:
-
如果你能用数学术语写一个关于你的代码实际在做什么的简短描述,那就太好了。
-
不能用纯分析法解决这个问题,而不是用数值方法吗?
-
是的,当然 - 例如,请参阅问题中的公式。这是从分布中随机抽样的演示。
-
矢量化可能不会让你买太多;计算 1M 随机数的时间将使循环开销相形见绌。
标签: numpy comparison broadcast