gpt4 book ai didi

c++ - 在 C++ 中计算标准差和方差

转载 作者:可可西里 更新时间:2023-11-01 17:21:11 39 4
gpt4 key购买 nike

所以,我已经发布了几次,之前我的问题非常模糊。我这周开始使用 C++ 并一直在做一个小项目。

我正在尝试计算标准差和方差。我的代码加载了一个包含 100 个整数的文件,并将它们放入一个数组中,对它们进行计数,计算均值、总和、方差和 SD。但是我在方差方面遇到了一些麻烦。

我一直得到一个巨大的数字 - 我觉得这与它的计算有关。

我的均值和总和没问题。

注意:

sd & mean calcs

using namespace std;

int main() {
int n = 0;
int Array[100];
float mean;
float var, sd;
string line;
float numPoints;

ifstream myfile("numbers.txt");

if (myfile.is_open()) {
while (!myfile.eof()) {
getline(myfile, line);

stringstream convert(line);

if (!(convert >> Array[n])) {
Array[n] = 0;
}

cout << Array[n] << endl;
n++;
}

myfile.close();
numPoints = n;
} else
cout << "Error loading file" << endl;

int sum = accumulate(begin(Array), end(Array), 0, plus<int>());
cout << "The sum of all integers: " << sum << endl;

mean = sum / numPoints;
cout << "The mean of all integers: " << mean << endl;

var = (Array[n] - mean) * (Array[n] - mean) / numPoints;
sd = sqrt(var);
cout << "The standard deviation is: " << sd << endl;

return 0;
}

最佳答案

这是另一种使用 std::accumulate 但不使用 pow 的方法。此外,我们可以使用匿名函数来定义在计算均值后如何计算方差。请注意,这会计算无偏样本方差。

#include <vector>
#include <algorithm>
#include <numeric>

template<typename T>
T variance(const std::vector<T> &vec) {
const size_t sz = vec.size();
if (sz == 1) {
return 0.0;
}

// Calculate the mean
const T mean = std::accumulate(vec.begin(), vec.end(), 0.0) / sz;

// Now calculate the variance
auto variance_func = [&mean, &sz](T accumulator, const T& val) {
return accumulator + ((val - mean)*(val - mean) / (sz - 1));
};

return std::accumulate(vec.begin(), vec.end(), 0.0, variance_func);
}

如何使用此功能的示例:

#include <iostream>
int main() {
const std::vector<double> vec = {1.0, 5.0, 6.0, 3.0, 4.5};
std::cout << variance(vec) << std::endl;
}

关于c++ - 在 C++ 中计算标准差和方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33268513/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com