优化Python代码以提高效率
分析此代码显示大部分时间都花在日志操作上。 为了提高效率,有没有其他方法在Python3中编写这篇文章?用列表理解替换循环实际上效率较低,因为lambdas的存在,map的效率也较低优化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 谢谢 我会将日志从总和中剔除,并缓存总和:
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谢谢代码>我从未来导入部门学习。