【问题标题】:numpy: get rid of for loop by broadcastingnumpy:通过广播摆脱 for 循环
【发布时间】:2017-06-23 23:47:27
【问题描述】:

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

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

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

【问题讨论】:

  • 发布的解决方案对您有用吗?
  • 是的!非常感谢

标签: python numpy numpy-einsum


【解决方案1】:

展平,使用pdf呼叫和重塑 -

from scipy import stats

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2017-02-20
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多