numpy:通过广播摆脱for循环

时间:2017-02-06 21:51:50

标签: python numpy numpy-einsum

我正在尝试在python中实现高斯混合模型的期望最大化算法。

我有以下行来计算我的数据 X 的高斯概率 p 给定平均 mu 和协方差 sigma

for i in range(len(X[0])):  
   p[i] = scipy.stats.multivariate_normal.pdf(X[:,i],mu,sigma)

我想知道我是否能以某种方式摆脱for循环以获得类似

的东西
p[:] = scipy.stats.multivariate_normal.pdf(X[:,:]??)

我做了一些关于广播的研究,并考虑使用numpy.einsum函数,但无法弄清楚它在这种情况下是如何工作的。

1 个答案:

答案 0 :(得分:0)

展平,使用pdf调用并重新整形 -

from scipy import stats

out = stats.multivariate_normal.pdf(X.ravel(),mu,sigma).reshape(-1,len(X[0])).T