代码之家  ›  专栏  ›  技术社区  ›  Pablo

使用dask。纸袋从\u序列计算核密度估计

  •  0
  • Pablo  · 技术社区  · 7 年前

    我试图计算一个相当大的二维数据集的核密度估计,以 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)
    

    在具有2677920个坐标对的数据集的四核至强E5-2609@2.4Hz上完成此操作需要60多小时。我是否正确使用dask?

    1 回复  |  直到 7 年前
        1
  •  0
  •   mdurant    7 年前

    不幸的是,Dask并不能在所有情况下都提供速度提升。事实上,如果您只使用一个输入块来执行KDE,您会发现它已经在使用多个核了,因此Dask没有多余的容量来拾取。

    用2x1000000大小的内核进行KDE(像卷积)似乎是不明智的,我并不奇怪这会花费很长时间。你确定这就是你想做的吗?

    此外,我可以借此机会让您考虑使用 datashader ,它可以与Dask数组按块工作,并包含很好的模糊管道元素。