代码

时间:2017-02-27 00:57:27

标签: c++ math standard-deviation

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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

对于直方图,您不需要保留所有数据 - 您只需要保留每个bin的计数,并在每次有新样本时增加右侧bin。当然,对于这种简单的支付方式,您需要事先知道预期的范围和箱数。如果无法做到这一点,您可以始终在小范围内使用小容器,并在满足当前范围之外的元素时缩放容器大小(合并相邻的容器)。同样,所有这些只需要一定量的内存(每个bin有一个整数,范围有两个值)。