Почему исполнение время в «для цикла» в Python с молнией не примерно то же самое в двух эквивалентных contextt

голоса
0

Я бегу тот же «цикл» в Python, используя ту же функцию с объектами одного и того же размера в двух различных, но эквивалентных условиях. Однако время вычисления двух петель не то же самое. В одном случае в три раза вычислительное время другого случая. Вот код:

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

время исполнения «цикл»: 13,779568910598755 +0,0259706974029541

В обоих случаях форма объектов local_analysis и state_batches точно так же.

Любая помощь будет высоко ценится. Конечно, я могу дать дополнительные объяснения и детали при необходимости :)

Задан 09/10/2019 в 13:00
источник пользователем
На других языках...                            


1 ответов

голоса
0

Я наконец-то нашел решение, но не объяснение этой проблемы. Как я использовал эту петлю в двух различных случаях, я мог проследить происхождение ошибки. В конце концов я обнаружил, что существует разница в выполнении времени «для цикла», если изменить положение параметров в определении аргументов функции и использование ключевых слов. Вот старое определение функции:

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):

А теперь время выполнения цикла одинакова в обоих случаях и близко к минимальному времени я уже упоминал в предыдущем посте.

Я очень удивлен этой ошибкой. Как вы думаете, передавая аргументы в качестве ключевых слов аргументов могут изменить время исполнения «цикл»?

Ответил 11/10/2019 в 14:12
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more