使用 dask delayed 创建字典值
Using dask delayed to create dictionary values
我正在努力弄清楚如何让 dask 延迟处理涉及创建字典的特定工作流。
这里的想法是 func1、func2、func3 可以同时 运行 彼此独立,我希望这些函数的结果是新字典中的值 z
.
from dask.delayed import delayed
x1 = {'a': 1, 'b': 2, 'c': 3}
x2 = {'a': 4, 'b': 5, 'c': 6}
@delayed
def func1(d1, d2):
return d1['a'] + d2['a']
@delayed
def func2(d1, d2):
return d1['b'] - d2['b']
@delayed
def func3(d1, d2):
return d1['c'] * d2['c']
z = {}
z['val1'] = func1(x1, x2)
z['val2'] = func2(x1, x2)
z['val3'] = func3(x1, x2)
当我 运行 以下内容时,出现错误:
>>> result_dict = z.compute()
AttributeError: 'dict' object has no attribute 'compute'
当我 运行 以下内容时,它成功了,但是结果是一个元组而不是字典。
>>> result_dict = dask.compute(z)
({'val1': 5, 'val2': -3, 'val3': 18},)
如何计算结果以便 returns 成为字典?我这样做对吗?
如您所见,dask.compute returns 一个结果元组
>>> dask.compute(z)
({'val1': 5, 'val2': -3, 'val3': 18},)
这是因为你可以给它很多参数,它会为每个参数产生一个结果
>>> result_dict = dask.compute(x, y, z)
(..., ..., ...)
你不管这个,你只要第一个元素。您可以使用 getitem [...]
语法获取 Python 中元组的第一个元素。
>>> dask.compute(z)[0]
{'val1': 5, 'val2': -3, 'val3': 18}
我正在努力弄清楚如何让 dask 延迟处理涉及创建字典的特定工作流。
这里的想法是 func1、func2、func3 可以同时 运行 彼此独立,我希望这些函数的结果是新字典中的值 z
.
from dask.delayed import delayed
x1 = {'a': 1, 'b': 2, 'c': 3}
x2 = {'a': 4, 'b': 5, 'c': 6}
@delayed
def func1(d1, d2):
return d1['a'] + d2['a']
@delayed
def func2(d1, d2):
return d1['b'] - d2['b']
@delayed
def func3(d1, d2):
return d1['c'] * d2['c']
z = {}
z['val1'] = func1(x1, x2)
z['val2'] = func2(x1, x2)
z['val3'] = func3(x1, x2)
当我 运行 以下内容时,出现错误:
>>> result_dict = z.compute()
AttributeError: 'dict' object has no attribute 'compute'
当我 运行 以下内容时,它成功了,但是结果是一个元组而不是字典。
>>> result_dict = dask.compute(z)
({'val1': 5, 'val2': -3, 'val3': 18},)
如何计算结果以便 returns 成为字典?我这样做对吗?
如您所见,dask.compute returns 一个结果元组
>>> dask.compute(z)
({'val1': 5, 'val2': -3, 'val3': 18},)
这是因为你可以给它很多参数,它会为每个参数产生一个结果
>>> result_dict = dask.compute(x, y, z)
(..., ..., ...)
你不管这个,你只要第一个元素。您可以使用 getitem [...]
语法获取 Python 中元组的第一个元素。
>>> dask.compute(z)[0]
{'val1': 5, 'val2': -3, 'val3': 18}