不支持延迟对象的真实性
Truth of Delayed objects is not Supported
我正在使用 dask 来延迟计算我的代码库中 return 系列的一些函数。到目前为止,大多数操作似乎都按预期运行 - 除了我使用 np.average
.
我的函数 return 是 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 延迟对象调用 Numpy 函数 np.average
。 Numpy 函数不知道如何处理 Dask Delayed 对象,因此它会引发错误。解决方法是也延迟 numpy 函数。
您可以执行以下操作:
a = dask.delayed(np.average)(ds, weights=ds)
a.compute()
这行得通(您会得到答案),但很可能不是您想要的。正在对数据调用单个函数 - 你确实在进行惰性操作,如果你有很多这样的计算,你可能会获得并行性。但是,我想说像这样传递延迟的 pandas 系列是很不寻常的。
您可能需要阅读 high level 数组和数据框接口,其中已为您完成拆分系列和数组的逻辑。
我正在使用 dask 来延迟计算我的代码库中 return 系列的一些函数。到目前为止,大多数操作似乎都按预期运行 - 除了我使用 np.average
.
我的函数 return 是 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 延迟对象调用 Numpy 函数 np.average
。 Numpy 函数不知道如何处理 Dask Delayed 对象,因此它会引发错误。解决方法是也延迟 numpy 函数。
您可以执行以下操作:
a = dask.delayed(np.average)(ds, weights=ds)
a.compute()
这行得通(您会得到答案),但很可能不是您想要的。正在对数据调用单个函数 - 你确实在进行惰性操作,如果你有很多这样的计算,你可能会获得并行性。但是,我想说像这样传递延迟的 pandas 系列是很不寻常的。
您可能需要阅读 high level 数组和数据框接口,其中已为您完成拆分系列和数组的逻辑。