C++ 使用 std::accumulate 计算标准偏差不正确
C++ Incorrect standard deviation calculation using std::accumulate
我使用以下代码计算标准差:
std::vector<float> k = {4,6,2};
float mean = 4;
float sum = std::accumulate(k.begin(), k.end(), 0, [&mean](float x, float y) {
return (y - mean) * (y - mean);
});
float variance = sum / k.size();
float stdev = sqrt(variance);
std::accumulate
returns 4
什么时候应该 return:
(4-4)^2 + (6-4)^2 + (2-4)^2 = 8
此外,打印 (y - mean) * (y - mean)
得到:
0
4
4
所以,为什么不 return 0 + 4 + 4
?
您没有使用 x 参数。请尝试以下操作:
float sum = std::accumulate(k.begin(), k.end(), 0.0F, [&mean](float x, float y) {
return x + (y - mean) * (y - mean);
});
更新:初始值为浮点数
我使用以下代码计算标准差:
std::vector<float> k = {4,6,2};
float mean = 4;
float sum = std::accumulate(k.begin(), k.end(), 0, [&mean](float x, float y) {
return (y - mean) * (y - mean);
});
float variance = sum / k.size();
float stdev = sqrt(variance);
std::accumulate
returns 4
什么时候应该 return:
(4-4)^2 + (6-4)^2 + (2-4)^2 = 8
此外,打印 (y - mean) * (y - mean)
得到:
0
4
4
所以,为什么不 return 0 + 4 + 4
?
您没有使用 x 参数。请尝试以下操作:
float sum = std::accumulate(k.begin(), k.end(), 0.0F, [&mean](float x, float y) {
return x + (y - mean) * (y - mean);
});
更新:初始值为浮点数