我在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。在这两起案件中。
任何帮助都将不胜感激。当然,如果需要的话,我可以提供进一步的解释和细节:)
发布于 2019-10-11 03:12:16
我终于找到了解决这个问题的办法,但没有给出解释。当我在两种不同的情况下使用这个循环时,我可以跟踪bug的起源。我最后发现,如果更改参数在函数定义中的位置并使用关键字参数,"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循环“的执行时间吗?
https://stackoverflow.com/questions/58301644
复制相似问题