Dask 运行 并行不同列表中元素的所有组合
Dask run all combination of elements in different lists in parallel
我正在尝试 运行 使用 dask 对不同数组中所有元素的不同组合的函数,但我正在努力应用它。
串口代码如下:
for i in range(5):
for j in range(5):
for k in range(5):
function(listA[i],listB[j],listC[k])
print(f'{i}.{j}.{k}')
k=k+1
j=j+1
i=i+1
此代码 运行在我的计算机上的宁时间是 18 分钟,而每个数组只有 5 个元素,我想 运行 此代码与更大尺寸的数组上的 dask 并行。
函数内的所有计算都不相互独立。
您可以假设函数的作用是:listA[i]*listB[j]*listC[k]
在网上查了很多,都没有找到解决办法。
非常感谢。
可以在使用 dask
之前改进代码段。可以直接遍历列表(即使用 for item in list_A:
),而不是遍历索引然后在列表中查找相应的项目。由于在这种情况下我们对三个列表中项目的所有组合感兴趣,我们可以使用内置的 combinations
:
from itertools import combinations
triples = combinations(list_A, list_B, list_C)
for i,j,k in triples:
function(i,j,k)
要使用 dask
,一种选择是使用 delayed
API。通过用 dask.delayed
包装 function
,我们获得了对函数结果的直接惰性引用。收集完所有惰性引用后,我们可以使用 dask.compute
:
并行计算它们
import dask
from itertools import combinations
triples = combinations(list_A, list_B, list_C)
delayeds = [dask.delayed(function)(i,j,k)for i,j,k in triples]
results = dask.compute(*delayeds)
我正在尝试 运行 使用 dask 对不同数组中所有元素的不同组合的函数,但我正在努力应用它。
串口代码如下:
for i in range(5):
for j in range(5):
for k in range(5):
function(listA[i],listB[j],listC[k])
print(f'{i}.{j}.{k}')
k=k+1
j=j+1
i=i+1
此代码 运行在我的计算机上的宁时间是 18 分钟,而每个数组只有 5 个元素,我想 运行 此代码与更大尺寸的数组上的 dask 并行。 函数内的所有计算都不相互独立。 您可以假设函数的作用是:listA[i]*listB[j]*listC[k]
在网上查了很多,都没有找到解决办法。 非常感谢。
可以在使用 dask
之前改进代码段。可以直接遍历列表(即使用 for item in list_A:
),而不是遍历索引然后在列表中查找相应的项目。由于在这种情况下我们对三个列表中项目的所有组合感兴趣,我们可以使用内置的 combinations
:
from itertools import combinations
triples = combinations(list_A, list_B, list_C)
for i,j,k in triples:
function(i,j,k)
要使用 dask
,一种选择是使用 delayed
API。通过用 dask.delayed
包装 function
,我们获得了对函数结果的直接惰性引用。收集完所有惰性引用后,我们可以使用 dask.compute
:
import dask
from itertools import combinations
triples = combinations(list_A, list_B, list_C)
delayeds = [dask.delayed(function)(i,j,k)for i,j,k in triples]
results = dask.compute(*delayeds)