大数据KDE非常慢

时间:2015-01-27 15:28:02

标签: python performance kernel-density

当我尝试制作散射图时,按密度着色,它需要永远。

可能是因为数据的长度非常大。

这基本上就是我这样做的:

xy = np.vstack([np.array(x_values),np.array(y_values)])
z = gaussian_kde(xy)(xy)
plt.scatter(np.array(x_values), np.array(x_values), c=z, s=100, edgecolor='')

作为附加信息,我必须补充一点:

>>len(x_values)
809649

>>len(y_values)
809649

是否有其他选择可以获得相同的结果但速度效果更好?

2 个答案:

答案 0 :(得分:1)

不,没有好的解决方法。

每个点都应该准备好,并画一个圆,其他点可能会将其隐藏。

我的窍门:(请注意,这点可能会稍微改变输出)

  • 获取最大值和最小值,并将图像设置为该尺寸,从而无需重做图形。

  • 尽可能删除数据:

    • 重复数据

    • 以选定的精度(例如浮点数)转换并删除重复的数据。您可以使用点的一半大小来计算精度(如果需要原始外观,则可以使用图形的分辨率来计算精度)。

    数据减少:速度更快。删除比在图形中绘制一个点要快得多(将被覆盖)。

  • 对于大量数据集,热图通常更有趣:它提供了更多信息。但就您而言,我认为您仍然有太多数据。

注意:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.html#scipy.stats.gaussian_kde也有一个很好的例子(仅2000点)。无论如何,这些页面也使用了我的第一点。

答案 1 :(得分:0)

我建议绘制数据样本。 如果样本足够大,您应该得到相同的分布。 确保绘图与整个数据集相关也很容易,因为您可以简单地抽取多个样本并在它们之间进行比较。