Я только учусь использовать dask и читаю на этом форуме много тем, связанных с Dask и циклами. Но мне все еще неясно, как применить эти решения к моей проблеме. Я работаю с климатическими данными, которые являются функциями (время, глубина, местоположение). Координата «местоположение» - это линейный индекс, так что каждое значение соответствует уникальному (долгота, широта). Ниже я показываю основную часть того, что я пытаюсь сделать, предполагая, что var1 и var2 - две входные переменные. Я хочу распараллелить параметр местоположения 'nxy', поскольку мои вычисления могут выполняться одновременно в разных местах.
for loc in range(0,nxy): # nxy = total no. of locations
for it in range(0,ntimes):
out1 = expression1 involving ( var1(loc), var2(it,loc) )
out2 = expression2 involving ( var1(loc), var2(it,loc) )
# <a dozen more output variables>
Мои вопросы:
(i) Множество примеров, иллюстрирующих использование ' задержано 'показать что-то вроде "отложено (функция) (аргумент)". В моем случае у меня не слишком много (если есть) функций, но много выражений. Если «delayed» работает только на уровне функций, я должен преобразовать каждое выражение в функцию и добавить «delayed» впереди?
(ii) Должен ли я обернуть все для l oop, показанного выше внутри функции, а затем вызвать эту функцию с помощью «задерживается»? Я пытался сделать что-то подобное, но, возможно, не делал это правильно, так как я не получил никакого ускорения по сравнению с без использования dask. Вот что я сделал:
def test_dask(n):
for loc in range(0,n):
# same code as before
return var1 # just returning one variable for now
var1=delayed(tast_dask)(nxy)
var1.compute()
Спасибо за вашу помощь.