大数据KDE非常慢

cod*_*ler 7 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='')
Run Code Online (Sandbox Code Playgroud)

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

>>len(x_values)
809649

>>len(y_values)
809649
Run Code Online (Sandbox Code Playgroud)

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

Gia*_*zzi 2

不,没有好的解决方案。

每个点都要准备好,画一个圆,这个圆可能会被其他点隐藏。

我的技巧:(注意这些点可能会稍微改变输出)

  • 获取最小值和最大值,并将图像设置为该尺寸,这样该图形就不需要重做。

  • 尽可能删除数据:

    • 重复数据

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

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

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

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