我有一个双倍和,基本上
总和=exp(x^2+y^2)
当然,我可以简单地使用两个嵌套的for
循环,但对于大数,这往往会很耗时。我可以使用一个列表理解来替换内部for
循环,请参见此处:
import numpy as np
N_x = 100
N_y = 100
# straight forward way
result_1 = .0
for x in xrange(N_x):
for y in xrange(N_y):
result_1 += np.exp( (float(x)/N_x)**2 + ( (float(y)/N_y)**2 )
# using one list comprehension
result_2 = .0
for x in xrange(N_x):
inner_loop = [ np.exp( (float(y)/N_y)**2 ) for y in range(N_y) ]
result_2 += np.exp( (float(x)/N_x)**2 ) * sum(inner_loop)
但是如何将外部for
循环替换为列表理解(我希望它更快),有什么提示吗?在
你就快到了。完整和可以写成两个1D和的乘积,即
(sum exp x^2) * (sum exp y^2)
:我猜这是你甚至可以用列表比较和击败暴力纽比的方法:
^{pr2}$实际上,在Python3中进行计时是因为我不知道如何在Python2中使用
timeit
:显然,numpy单品速度更快
你为什么不用裸体的方式。。。无回路:
相关问题 更多 >
编程相关推荐