首页 > 解决方案 > 为什么在 Python 中使用 zip 执行“for 循环”的时间在两个等效上下文中不大致相同

问题描述

我在 Python 中使用相同的函数在两个不同但等效的上下文中使用相同大小的对象运行相同的“for 循环”。然而,两个循环的计算时间并不相同。在一种情况下,它的计算时间是另一种情况的三倍。这是代码:

result = multiproc_map(local_analysis, state_batches)
for ii, (ATii,muii) in zip(state_batches, result):
   AT[:,ii] = ATii 
   mu[ii]  = muii 

以下是上述代码部分在两种情况下的不同执行时间(以秒为单位):

multiproc_map 执行时间:9.5367431640625e-07 4.069389343261719

“for循环”的执行时间:13.779568910598755 0.0259706974029541

在这两种情况下,对象 local_analysis 和 state_batches 的形状完全相同。

最后,我想了解为什么两种情况下的执行时间不同,以及我可以做些什么来使执行时间更接近 4s。在这两种情况下。

任何帮助将不胜感激。当然,如果需要,我可以提供进一步的解释和细节:)

标签: timezippython-multiprocessing

解决方案


我终于找到了解决方案,但没有对此问题的解释。当我在两种不同的情况下使用这个循环时,我可以追踪错误的来源。最后发现,如果我在函数的定义中改变参数的位置,使用关键字参数,“for循环”的执行时间是有差异的。这是函数的旧定义:

hybrid_dual_resolution(N,Nl,Nhs,Nls,alpha,betaH1,betaH2,betaH3,betaL1,betaL2,betaL3,
                       opt_file_hr,opt_file_lr,loc_radh,loc_radl,upd_a,
                       infl=1.0,rot=False,mp=False,taper='GC',**kwargs):

这是我将参数作为关键字参数提供的函数的新定义:

def hybrid_dual_resolution(opt_file_hr=None,opt_file_lr=None,upd_a='DEnKF',
                           N=3,Nhs=200,Nl=32,Nls=200,loc_radh=17.7,loc_radl=8.75,
                           alpha=0.04,
                           betaH1=1.,betaH2=0.,betaH3=0.,
                           betaL1=0.,betaL2=1.,betaL3=0.,
                           taper='GC',infl=1.0,
                           rot=False,mp=False,**kwargs):

现在循环的执行时间在两种情况下都是相同的,并且接近我在上一篇文章中提到的最短时间。

我对这个错误感到非常惊讶。您是否认为将参数作为关键字参数传递可以改变“for循环”的执行时间?


推荐阅读