我正在使用dask延迟某些返回代码序列的函数的计算。到目前为止,大多数操作似乎都按预期运行-除了我使用np.average
之外。
我拥有的函数返回一个pd.Series
,然后我要对它计算加权平均值。
以下是非快速版本:
import dask
import numpy as np
import pandas as pd
s = pd.Series([1,2,3])
a = np.average(s, weights=s)
print(a)
ds = dask.delayed(lambda: s)()
a = np.average(ds, weights=ds)
print(a.compute())
np.average
调用引发一个TypeError: Truth of Delayed objects is not supported
。
不确定我的用法中哪一部分是错误的。
答案 0 :(得分:0)
问题在于您正在对延迟延迟的对象调用Numpy函数np.average
。 Numpy函数不知道如何处理Dask Delayed对象,因此会引发错误。解决方案是也延迟numpy函数。
您可以执行以下操作:
a = dask.delayed(np.average)(ds, weights=ds)
a.compute()
这行得通(您得到了答案),但可能并非您所追求的那样。正在对数据调用单个函数-您确实在进行惰性操作,并且如果您有许多这样的计算,则可能会并行化。但是,我想像这样绕过延迟的熊猫系列是很不寻常的。
您可能想阅读high level数组和数据框架接口,其中已完成了将序列和数组拆分的逻辑。