【发布时间】:2018-03-25 12:13:53
【问题描述】:
我有一个这样的工作代码,但它相当慢。
def halfconvolution(g,w,dz):
convo=np.zeros_like(g)
for i in range(0,len(g)):
sum=0
for j in range(0,i):
sum+=g[j]*w[(i-j)]*dz
convo[i] = -sum
return convo
我正在尝试将其转换为列表理解,但我很挣扎。
我试过了:
convo=[-g*w[i-j] for i in g for j in w]
【问题讨论】:
-
为什么您认为列表理解会“更快”?不要为了减少代码行数而混淆循环
-
您应该在理解中使用
for i in range(len(g))和for j in range(i),就像在循环中一样。不要忘记测量,看看你是否真的获得了更好的性能。 -
@cricket_007 出于某种原因,我认为列表理解更快.. 我计时了,实际上它更慢。关于加速这样的代码有什么建议吗?
-
您正在使用 Numpy,但执行循环以返回一个数组...您应该一次对整个列使用 矢量化操作,而不是索引列并更新单个单元格
标签: python list list-comprehension