在numpy中矢量化比较

在numpy中矢量化比较,numpy,comparison,broadcast,Numpy,Comparison,Broadcast,如何在NumPy中对该循环进行矢量化?它使用NumPy的二项式()函数的抽样来估计特定类型的55个事件中确切发生m的概率,其中发生m的概率为5%;即估计为55厘米(0.05)^米(0.95)^(55米)。其中55Cm=55/(米!(55米)!) 以下是等效代码: p = np.zeros(M+1) print p 我想你并不想让你的输出总是为零,但事实确实如此!因此,首先要做的是在np.sum()调用中添加一个dtype=float参数。有了这些,我们可以像这样对整个事情进行矢量化: samp

如何在NumPy中对该循环进行矢量化?它使用NumPy的
二项式()
函数的抽样来估计特定类型的55个事件中确切发生
m
的概率,其中发生
m
的概率为5%;即估计为55厘米(0.05)^米(0.95)^(55米)。其中55Cm=55/(米!(55米)!)


以下是等效代码:

p = np.zeros(M+1)
print p
我想你并不想让你的输出总是为零,但事实确实如此!因此,首先要做的是在
np.sum()
调用中添加一个
dtype=float
参数。有了这些,我们可以像这样对整个事情进行矢量化:

samples = np.random.binomial(55, 0.05, (ntrials, M+1))
p = np.sum(samples == m, dtype=float, axis=0) / ntrials
这会产生一个等效(尽管不完全相同)的结果。原因是随机数生成是在不同的序列中完成的,因此您将得到一个“正确”但与旧代码不同的答案。如果希望得到与之前相同的结果,可以将第一行更改为:

samples = p.random.binomial(55, 0.05, (M+1, ntrials)).T

然后按照与之前相同的顺序绘制,没有实际的性能损失。

如果您用数学术语简要描述代码实际执行的操作,那就太好了。这难道不能用纯分析而不是数字来解决吗?是的,当然-例如,请参见问题中的公式。这是从分布中随机抽样的演示。矢量化可能不会给你带来太多好处;计算1M随机数的时间将使循环开销相形见绌。谢谢-我使用的是Python 3(尽管我的print语句可能给人留下了这样的印象),所以数据类型不是问题。有没有一种方法可以在不存储像
samples
这样的大型数组的情况下执行此操作?我不知道。你想解决的真正问题是什么?CPU时间太慢?内存太大?在某个时候,你最好写一些C或C++代码并调用它。这只是一个演示,但是我想尽可能高效:当前解决方案示例:代码> NTest每一个概率的概率,并且在只需要计数时存储值。
samples = p.random.binomial(55, 0.05, (M+1, ntrials)).T