计算大小增加的向量的平均值
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<double> &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
。
【讨论】:
以上是关于计算大小增加的向量的平均值的主要内容,如果未能解决你的问题,请参考以下文章