【发布时间】:2015-07-26 15:47:23
【问题描述】:
我有一个函数可以计算狄利克雷分布的条件(在第 k 个 alpha 上)对数似然。我用 Cython 编写并编译了它,但我的代码调用它大约 12M 次,这似乎是瓶颈,所以我希望加快速度。
cimport numpy as np
import numpy as np
import math
DTYPE = np.float64
ctypedef np.float64_t DTYPE_t
def logFullConAlphaK(np.ndarray p,np.ndarray alpha, np.int k):
assert p.dtype == np.float64 and alpha.dtype == np.float64
cdef double t1=sum(np.log(p))
cdef DTYPE_t y=((alpha[k-1]-1)*t1)-np.log(alpha[k-1])+(p.shape[0]*
(math.lgamma(sum(alpha))- math.lgamma(alpha[k-1])))
return y
我将 Cython 编译成我在代码中使用的 .pyd 文件。有什么想法可以加快速度吗?
谢谢
【问题讨论】:
-
在要求代码优化时,请始终包含示例数据并为您的代码提供时序。这使其他人更容易帮助您。也就是说,在高性能 numpy 代码中使用
np.sum而不是内置的sum。
标签: python performance numpy optimization cython