numpy:通过广播摆脱 for 循环

numpy: get rid of for loop by broadcasting

我正在尝试在 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 函数,但无法弄清楚在这种情况下它会如何工作。

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

from scipy import stats

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