【问题标题】:KDE is very slow with large dataKDE 处理大数据时速度很慢
【发布时间】:2015-03-26 06:38:50
【问题描述】:

当我尝试制作一个按密度着色的散点图时,它需要很长时间。

可能是因为数据的长度比较大。

这基本上是我的做法:

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

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

【问题讨论】:

  • 您是否测试过是scatter 函数本身运行缓慢,还是运行plt.showplt.savefig 时出现运行缓慢?
  • 标题具有误导性。您正在为大型数据集执行KDE
  • 完全正确的 cel,缓慢发生在 z = gaussian_kde(xy)(xy) 我改变它
  • @newPyUser 你用什么代替了gaussian_kde?你说过你会改变它。
  • 降低 KDE 的带宽,使用更快的内核(例如线性)并且不要用散点图绘制 80000 个点。

标签: python performance kernel-density


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    不,没有好的解决方案。

    每个点都要准备好,画一个圆,大概会被其他点遮住。

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

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

    • 尽可能多地删除数据:

      • 重复数据

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      相关资源
      最近更新 更多