【问题标题】:Statistical sampling of code [duplicate]代码的统计抽样[重复]
【发布时间】:2017-07-17 12:03:38
【问题描述】:

这可能是一个非常开放的问题。 我必须快速测量某段代码的时间。我正在使用std::chrono::high_resolution_clock 功能。我必须运行此代码进行多次迭代并测量持续时间。

所以问题来了:我可以测量最小和最大持续时间值,并使用样本数计算平均值。在这种情况下,我只需要存储 4 个值。但我也想知道数据是如何分布的。标准偏差或直方图的计算需要存储所有数据点。然而,这将需要一个巨大的初始数据结构或动态增长的数据结构——这两者都会影响我嵌入式系统上的测量代码。 有没有办法使用前一个样本的标准偏差来计算这个样本的标准偏差?

【问题讨论】:

    标签: c++ math standard-deviation


    【解决方案1】:

    计算标准差或直方图需要存储所有数据点

    这是微不足道的错误。您可以使用 Welford 算法计算运行标准差,除了运行均值和当前元素计数之外,该算法只需要一个额外的变量。

    至于直方图,您不需要保留所有数据 - 您只需要保留每个 bin 的计数,并在每次有新样本时增加正确的 bin。当然,对于这种简单的支付方式,您需要提前知道预期的范围和箱数。如果这不可能,您始终可以从小范围内的小 bin 开始,并在遇到当前范围之外的元素时缩放 bin 大小(合并相邻的 bin)。同样,所有这些只需要固定数量的内存(每个 bin 一个整数,范围有两个值)。

    【讨论】:

    • 这是正确的,我不知道预期的值范围。自动调整垃圾箱可能会起作用。你知道一个开源代码示例吗?感谢您指出 Welford 的算法。
    猜你喜欢
    • 2012-10-08
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2017-10-01
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多