【问题标题】:Numpy Double summationNumpy 双重求和
【发布时间】:2014-06-28 21:13:28
【问题描述】:

我的实现是:

def getGaussianValue(x, mean, covariance):
    part1 = 1/np.power(2*np.pi, x.shape[0]/2)
    part2 = 1/np.sqrt(np.linalg.det(covariance))
    part3 = np.exp(-(0.5) * np.matrix(x-mean) * np.matrix(np.linalg.inv(covariance)) *  np.matrix(x-mean).T)
    return part1 * part2 * part3 
def getLogLikelihood(K, data, pii, mean, covariance):
    sum_i = 0.0
    for i in range(data.shape[0]):
        sum_k = 0.0
        for k in range(K):
            sum_k += pii[k] * getGaussianValue(data[i], mean, covariance)
        sum_i += np.log(sum_k)
    return sum_i

这里N=150, K=3,X150x4numpy 数组,Covariance(Sigma)3x4x4 numpy 数组,mean(mu)3x4 numpy 数组。如何让它更快?

【问题讨论】:

标签: python arrays performance numpy scipy


【解决方案1】:

预先计算所有可能的东西总是一个好主意,永远不要计算任何东西。

  1. 只需反转一次协方差并存储反转矩阵
  2. 还预先计算标准化项part1part2 一次,而不是每次调用getGaussianValue
  3. 不用计算np.matrix(x-mean)两次(不知道numpy是否优化)
  4. 考虑使用 numpy 的内置函数,例如 scipy.stats.multivariate_normal.pdf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多