C ++:如何计算2个向量之间的RMSE

时间:2018-02-23 20:23:26

标签: c++

例如,要计算向量A的内积,而不是循环向量中的每个元素并计算总和,我们可以使用库的inner_product()函数:

std::inner_product(A.begin(), A.end(), A.begin(), 0.0);

我想知道是否存在类似的代码可用于计算2个向量之间的均方根误差(RMSE)(当然大小相同)A和B?

谢谢!

2 个答案:

答案 0 :(得分:0)

没有专门用于计算RMSE的功能。但是,有一些功能可以通过提供二进制操作来帮助您实现这一目的,例如std::transform_reduce

auto squareError = [](T a, T b) {
    auto e = a-b;
    return e*e;
}
auto sum = std::transform_reduce(A.begin(), A.end(), B.begin(), 0, std::plus<>(), squareError);
auto rmse = std::sqrt(sum / a.size());

std::transform_reduce可能尚未在您的编译器库中实现。在这种情况下,您可以使用std::inner_product的描述性较小的重载(以相同的方式)。

答案 1 :(得分:0)

谢谢大家。 根据miradulo和Nelfeal的回答,std::inner_product()std::transform_reduce()都有适当的开销可以解决问题。

开销1:plus<>()

开销2:lambda函数

auto squaredError = [](auto a, auto b) {
    auto error = a - b;
    return (error * error);
}