python - 不支持延迟对象的真相
问题描述
我正在使用 dask 来延迟一些在我的代码库中返回系列的函数的计算。到目前为止,大多数操作的行为似乎都符合预期——除了我使用np.average
.
我拥有的函数返回 apd.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
不确定我的使用的哪一部分是错误的。
解决方案
问题是您np.average
在延迟延迟的对象上调用 Numpy 函数。Numpy 函数不知道如何处理 Dask Delayed 对象,因此会引发错误。解决方案也是延迟 numpy 函数。
您可以执行以下操作:
a = dask.delayed(np.average)(ds, weights=ds)
a.compute()
这有效(你得到了答案),但它可能不是你所追求的。正在对数据调用单个函数 - 你确实得到了惰性操作,如果你有很多这样的计算,你可能会得到并行性。但是,我想说像这样传递延迟的熊猫系列是很不寻常的。
您可能想阅读高级数组和数据帧接口,其中为您完成了拆分系列和数组的逻辑。
推荐阅读
- elasticsearch - 有没有办法从 elasticsearch/kibana 的索引中删除今天上传的数据
- amazon-ec2 - 如何在AWS中获取OU中Member用户创建的EC2实例列表
- javascript - 如何使用ajax和jquery从带有id的xm文件中获取数据
- linux - GCE:Ubuntu 18.04 自定义映像没有连接/SSH?
- django - 加载静态文件时出现问题|| django
- java - 检查两个 JSON 是否匹配并生成不同的报告
- ruby-on-rails - Rails、Heroku、Cloudinary:虽然在本地工作,但照片在生产中没有上传到 cloudinary
- azure - 远程禁用我的 Azure 虚拟机上的网络级别安全性
- javascript - 如何创建动态数据集和新的动态多 yAxes
- api - 开发企业级和可扩展的现代 API Web 服务的方法