簡體   English   中英

C++:如何計算 2 個向量之間的 RMSE

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM