c++从双精度数组中减去平均值

C++ subtract mean from array of double

本文关键字:平均值 数组 双精度 c++      更新时间:2023-10-16

我有一个大约有10,000个元素的double*数组,并且必须从中减去平均值。这是必须经常做的。

现在我已经做了,别傻了:

double mt = 0;
for (int i=0; i<n; i++) {mt += array[i];}
mt /= n;
for (int i=0; i<n; i++) {array[i] -= mt;}

where array:双精度&n是数组的大小。我相信有一些方法来实现它与一些花哨的字符会快得多,我希望你们的家伙可以帮助我与此。

干杯magu

这可以用更短的方式完成,但性能不会明显更好。使用std::accumulate from <algorithm>:

double mean = std::accumulate(array, array + n)/double(n);

你可以做的是记住你第一次计算它,然后在下一次迭代中简单地从总和中减去(mt * n)(假设你在问题中显示的是迭代之间发生的修改)。

我觉得你的解决方案不错。

你可以使用std::transform,但我确信它不会使它更可读。

如果你必须经常这样做,那么为什么不保持一个总数和数组中的项目数呢?

则计算平均值的和的复杂度为O(1)。

您可以通过保留total_value的活动副本来跳过每次平均值的计算。如果你必须递归地从同一表格本身减去平均值,那么你可以使用以下公式并找到总数。

new_total = old_total - n * prev_mean;New_mean = new_total/n;

似乎没有什么实现在低水平。

谢谢你的回答。