优化Python代码以提高效率

优化Python代码以提高效率,python,python-3.x,Python,Python 3.x,分析此代码显示大部分时间都花在日志操作上。 为了提高效率,有没有其他方法在Python3中编写这篇文章?用列表理解替换循环实际上效率较低,因为lambdas的存在,map的效率也较低 def log_total(data): total = 0.0 log = log(data) for i in range(10000): total += log/(i+1) return total 谢谢 我会将日志从总和中剔除,并缓存总和:

分析此代码显示大部分时间都花在日志操作上。 为了提高效率,有没有其他方法在Python3中编写这篇文章?用列表理解替换循环实际上效率较低,因为lambdas的存在,map的效率也较低

def log_total(data): 
    total = 0.0   
    log = log(data) 
    for i in range(10000): 
        total += log/(i+1)  
    return total

谢谢

我会将
日志
从总和中剔除,并缓存总和:

harmonic_series = sum(1. / i for i in range(1, 10001))  # Thanks, @mgilson

def log_total(data): 
    return log(data) * harmonic_series

您还可以使用来进一步加快速度。

可以在线使用
lambda
编写,如下所示:

total = lambda data: log(data) * sum(1.0 / i for i in xrange(1, 10001))

我使用了
python2.7.3

你真的必须选择与
log
函数相同的变量名吗?你可以保存一个附加值:
对于范围内的I(110001):total+=log/I
@mgilson:Huh,这将它从每个循环
1.42毫秒
加速到每个循环
1.09毫秒
。这是一个相当大的进步。@mgilson,这确实更快!您的
log
函数是否是
math
模块中的函数?如果是这样,我怀疑您能否直接提高它的性能(因为它是用C实现的内置函数)。如果
log
是您为自己编写的代码,那么可能还有改进的余地,但在我们提出任何建议之前,您必须先显示其代码@用户\u noname\u 00:查看我的编辑。这样的缓存速度非常快,但就像作弊一样:)必须有一种方法在内部优化函数。当我说它比较慢时,求和是在函数内部计算的。但是,解是等价的。即使您优化了
日志
,它仍然会被调用10000次,因此每次都会产生巨大的成本,特别是当您基本上使用静态变量,但每次调用该方法都要计算它时。下一步是使用
memmoization
,如另一个问题中所述,以从函数中获得更高的速度。@user\u noname\u 00:所以你想优化它,但它需要保持缓慢?你也可以使用numpy做得更好:
”(1./np.arange(110001)).sum()“
将它降低了约6倍(但不是那么懒惰)我改了。我忘了a*b1+a*b2+a*bn=a*(b1+b2+bn)。哈哈,我忘了写那个。把你的列表理解改成生成器。通过添加括号,将创建一个包含
10000
元素的实际列表(尝试将
10001
更改为
100000001
,看看会发生什么),这将占用大量RAM。您的代码段正在进行整数除法。更改为
1.0/i
或使用来自未来导入部门的
,否则您的总数将等于
1+0+0+0+…
@Paul McGuire
谢谢我从未来导入部门学习