我的实施是:
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
,X
是150x4
numpy数组,Covariance(Sigma)
是3x4x4
numpy数组,mean(mu)
是3x4
numpy数组。如何让它更快?
答案 0 :(得分:3)
预先计算可能的所有内容并且永远不会计算任何东西两次总是一个好主意。
part1
和part2
,而不是每次调用getGaussianValue
np.matrix(x-mean)
两次(不知道numpy是否优化了它)scipy.stats.multivariate_normal.pdf