[英]C++: how to calculate RMSE between 2 vectors
例如,要計算向量 A 的內積,而不是循環向量中的每個元素並計算總和,我們可以使用庫的 inner_product() 函數:
std::inner_product(A.begin(), A.end(), A.begin(), 0.0);
我想知道是否有一段類似的代碼可用於計算 2 個向量(當然大小相同)A 和 B 之間的均方根誤差 (RMSE)?
謝謝!
沒有專門用於計算 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
描述性較弱的重載(以相同的方式)。
謝謝大家。 根據 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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.