例如,要计算向量A的内积,而不是循环向量中的每个元素并计算总和,我们可以使用库的inner_product()函数:
std::inner_product(A.begin(), A.end(), A.begin(), 0.0);
我想知道是否存在类似的代码可用于计算2个向量之间的均方根误差(RMSE)(当然大小相同)A和B?
谢谢!
答案 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);
}