不支持延迟对象的真相



我正在使用 dask 来延迟一些在我的代码库中返回序列的函数的计算。到目前为止,大多数操作似乎都按预期运行 - 除了我使用np.average.

我拥有的函数返回一个pd.Series然后我想计算加权平均值。

下面是一个非 dask 和 dask 版本:

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

不确定我的用法的哪一部分在这里是错误的。

问题是您正在 dask 延迟对象上调用np.average的 Numpy 函数。 Numpy 函数不知道如何处理 Dask 延迟对象,因此它会引发错误。 解决方案是延迟 numpy 函数。

您可以执行以下操作:

a = dask.delayed(np.average)(ds, weights=ds)
a.compute()

这有效(你得到了答案(,但它很可能不是你所追求的。对数据调用单个函数 - 你确实得到了惰性操作,如果你有很多这样的计算,你可能会得到并行性。然而,我想说像这样传递延迟的熊猫系列是非常不寻常的。

您可能需要阅读高级数组和数据帧接口,其中为您完成了拆分系列和数组的逻辑。

最新更新