计算大小增加的向量的平均值

Posted

技术标签:

【中文标题】计算大小增加的向量的平均值【英文标题】:Calculating averages of a vector with increasing size 【发布时间】:2016-12-17 02:32:23 【问题描述】:

我有一个每秒运行数百次的渲染函数,它告诉我每帧绘制需要多少毫秒。

我做了一个函数来计算所有帧的当前渲染速度平均值,它使用一个 std::vector 来保存所有之前的帧。

但是,每次我运行我的程序时,存储平均值的向量都会变得很大,占用的内存量也越来越大,同时我的程序也会减慢近 10 倍(绘制速度)。

平均函数(请注意我是 C++ 初学者):

double average(std::vector<double> input_vector)

    double total = 0;

        for(unsigned int i = 0; i < input_vector.size(); i++)
        
            total += input_vector.at(i);
        

    return (total / (double)input_vector.size());

有人可以帮我解决这个问题吗?

谢谢

【问题讨论】:

通过引用传递向量,而不是通过值:double average(std::vector&lt;double&gt; &amp;input_vector)——这段代码每次都复制整个向量。哦。 另外,使用operator[] 代替at。或者直接使用std::accumulate。顺便说一句,这可以在 C++17 中自动并行化。 (也可以使用 libstdc++,但这不是您使用的。) 感谢两位的提示。以后我一定会记住的! 【参考方案1】:

鉴于算术平均值的定义是sum( n ) / count( n ),您不需要存储n 的每个值来重新计算运行平均值,您只需要当前的sum 和当前的count,例如所以:

double runningMean(double newValue) 
    static double sum = 0;
    static double count = 0;

    count++;
    sum += newValue;

    return sum / count;

根本不需要vector

【讨论】:

以上是关于计算大小增加的向量的平均值的主要内容,如果未能解决你的问题,请参考以下文章

均值方差协方差协方差矩阵特征值特征向量

计算具有一个输入参数的向量的平均值并找到以下向量的平均值:[1 2 3 4 5 6] [关闭]

如何从df计算每n个向量的平均值

如何计算向量中的渐进平均值但在满足条件时重新启动?

使用带有 STL 向量的 SSE 计算平均值

计算 Octave 中行组的列的平均值