我写模拟代码已经有一段时间了,总有一个主循环看起来像这样,在Python中:
while t<totalTimesteps:
t += 1
processOneTimestep()
outputData()
行outputData()
将结果写入一个文件,每个时间步一个用于分析。这种编写可能会花费相当多的时间,而且我们通常不需要在每个时间步中都显示我们正在做的事情的状态,所以它通常看起来像这样:
while t<totalTimesteps:
t += 1
processOneTimestep()
if t%N == 0:
outputData()
,其中N
是一个整数,用于设置写入的频率。假设模拟和编写本身都经过了优化,那么在Python中是否有一种方法可以加速模数检查,或者使用内联Python魔法使其更快?if
行在Python中是最快的吗?
我不知道它是否更快,但你可以使用嵌套循环。
for tsteps in range(0, totalTimesteps, N):
for t in range(tsteps, min(tsteps+N, totalTimesteps)):
processOneTimestep()
outputData()
您可以使用map将函数应用于所有索引。要获得所有不同的索引,您可以使用range,您可以使用lambda函数来获得更简洁的代码。
N=3 #example N
map(
lambda i: (processOneTimestep(), outputData()) if i%N==0 else processOneTimestep(),
range(totalTimesteps)
)
当i%N==0
在其他情况下只执行processOneTimestep()
时,此代码将执行两个函数