【发布时间】:2017-03-04 20:53:16
【问题描述】:
我正在寻找一种方法来缓存 gammaln 函数的结果,将其应用于 numpy 数组,然后对结果求和。目前我能够使用简单的字典方法缓存 gammln 结果,但似乎我无法有效地迭代数组。下面是问题的说明性代码片段。
import numpy as np
from scipy.special import gammaln
gammaln_cache_dic = {}
def gammaln_cache(x):
if x not in gammaln_cache_dic:
val = gammaln(x)
gammaln_cache_dic[x] = val
else:
val = gammaln_cache_dic[x]
return val
def cache_gammaln_sum(M):
res_sum = 0.0
for x in np.fromiter( [ x for x in M ], int ):
res_sum += gammaln_cache(x)
return res_sum
np_array = np.random.randint(5, size=(500))*1000+3
start = time.time()
for i in np_array:
gammaln(i)
end = time.time()
print("NO cache gammaln %f secs" % (end - start))
start = time.time()
for i in np_array:
gammaln_cache(i)
end = time.time()
print("cache gammaln %f secs" % (end - start))
start = time.time()
gammaln(np_array).sum()
end = time.time()
print("NO cache gammaln sum %f secs" % (end - start))
start = time.time()
cache_gammaln_sum(np_array)
end = time.time()
print("cache gammaln sum %f secs" % (end - start))
【问题讨论】:
标签: python caching scipy gamma-function