使用dask.bag.from_sequence计算内核密度估计值

时间:2017-12-11 15:00:14

标签: python dask

我正在尝试计算相当大的二维数据集的核密度估计值colour the points in a scatter plot。函数scipy.stats.gaussian_kde需要很长时间,因此我认为我可以使用dask(v0.15.2)来更快地获得结果。但是,我不确定我的方法是否真的加速了。这是一个例子:

import numpy as np
from scipy.stats import gaussian_kde
import dask.bag as db

xy = np.random.rand(2, 1000000)
kde = gaussian_kde(xy)

chunker = (xy[:, i:i+10000] for i in range(100))

compute_job = db.from_sequence(chunker).map(kde)

results = compute_job.compute()
z = np.hstack(results)

这需要超过60小时才能在四核Xeon E5-2609 @ 2.4Hz上完成,数据集为2,677,920个坐标对。我正确使用dask吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,Dask在所有情况下都不提供加速。实际上,如果只使用一个输入块执行KDE,你会发现它已经使用了多个内核 - 因此Dask没有备用容量可供选择。

使用大小为2x1000000的内核执行KDE(如卷积)似乎是不明智的,我并不感到惊讶,它花了很长时间。你确定这是你想做的吗?

此外,我可以借此机会考虑使用datashader,它与Dask阵列一起工作,并且包含很好的模糊管道元素。