加权移动平均算法 C++ 代码实现 求平均后的数组
时间: 2024-09-10 14:24:14 浏览: 41
滑动平均算法
4星 · 用户满意度95%
在C++中,我们可以使用STL库中的`std::weighted_merge`来进行加权移动平均的数组计算。这里是一个简单的例子,假设我们有两组数据(值和对应权重),并希望将它们合并成一个新的数组,权重越高,该位置的值对最终平均值的影响越大:
```cpp
#include <vector>
#include <numeric>
// 假设我们有两个向量,values存储原始数据,weights存储对应权重
std::vector<double> values;
std::vector<double> weights;
// 首先检查权重和数值是否长度一致,如果不是则返回错误
if (values.size() != weights.size()) {
throw std::invalid_argument("Values and weights vectors must have the same size.");
}
// 使用std::transform将每个元素乘以其权重
auto product = values | std::views::transform(weights);
// 然后计算累积求和
double total_weighted_value = std::accumulate(product.begin(), product.end(), 0.0);
double average = total_weighted_value / std::accumulate(weights.begin(), weights.end(), 0.0);
// 如果需要,创建一个新的向量来存储加权平均值
std::vector<double> result(values.size());
for (size_t i = 0; i < values.size(); ++i) {
result[i] = values[i] * weights[i] / average;
}
return result;
```
这个代码片段首先计算了每个值的加权总和和总权重,然后根据这两个值来计算平均值,并应用于原始数据生成加权移动平均数组。
请注意,这只是一个基本实现,实际应用中可能需要根据具体情况调整权重处理方式和异常处理。
阅读全文