【发布时间】: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,X 是150x4numpy 数组,Covariance(Sigma) 是3x4x4 numpy 数组,mean(mu) 是3x4 numpy 数组。如何让它更快?
【问题讨论】:
-
您的对数似然状态均值和协方差取决于
k,但代码似乎并未反映这一点。 -
有多慢?你有没有运行
timeit来比较不同的实现? -
有多种工具可用于分析 Python。您可能会查看 cProfile (docs.python.org/2/library/profile.html) 或 Python 行分析器 github.com/rkern/line_profiler
标签: python arrays performance numpy scipy