如何从随机分布数据中计算 C++ 中的样本均值、标准差和方差,并与原始均值和西格玛进行比较
How to Calculate the sample mean, standard deviation, and variance in C++ from random distributed data and compare with original mean and sigma
我有 Python 高斯正态分布脚本:
import numpy as np
x_mu = 25
x_sigma = 5
size = 1000
x_distribution = np.random.normal(x_mu, x_sigma, size)
#i am looking for help ONLY FOR this line below
test_distribution = np.std(x_distribution)
print (test_distribution)
更新:对于大数据(可能是 10000 或只有 500,所以我也会测试它),样本均值和标准差必须接近原始输入(sigma 和均值)。
我指的是这个link,需要用c++写。
请,如果您知道 C++ 中的任何库或想法,请留下评论或回答。谢谢
C++ 没有标准偏差函数,因此您需要自己编写所有必要的函数——生成随机数并计算标准偏差。
double stDev(const vector<double>& data) {
double mean = std::accumulate(data.begin(), data.end(), 0.0) / data.size();
double sqSum = std::inner_product(data.begin(), data.end(), data.begin(), 0.0);
return std::sqrt(sqSum / data.size() - mean * mean);
}
int main() {
double x_mu = 25;
double x_sigma = 5;
size_t size = 1000;
std::normal_distribution<double> x_distribution(x_mu, x_sigma);
//generate random numbers and store them in a vector
vector<double> data(size);
std::random_device rd;
std::mt19937 gen(rd());
for(size_t i=0; i<size; i++) {
data[i] = x_distribution(gen);
}
double test_distribution = stDev(data);
cout << test_distribution << endl;
return 0;
}
更新:
要获得均值、方差和标准差,您可以创建单独的函数来进行计算。一种可能的实现方式是:
double mean(const vector<double>& data) {
return std::accumulate(data.begin(), data.end(), 0.0) / data.size();
}
double variance(const vector<double>& data) {
double xBar = mean(data);
double sqSum = std::inner_product(data.begin(), data.end(), data.begin(), 0.0);
return sqSum / data.size() - xBar * xBar;
}
double stDev(const vector<double>& data) {
return std::sqrt(variance(data));
}
我有 Python 高斯正态分布脚本:
import numpy as np
x_mu = 25
x_sigma = 5
size = 1000
x_distribution = np.random.normal(x_mu, x_sigma, size)
#i am looking for help ONLY FOR this line below
test_distribution = np.std(x_distribution)
print (test_distribution)
更新:对于大数据(可能是 10000 或只有 500,所以我也会测试它),样本均值和标准差必须接近原始输入(sigma 和均值)。
我指的是这个link,需要用c++写。
请,如果您知道 C++ 中的任何库或想法,请留下评论或回答。谢谢
C++ 没有标准偏差函数,因此您需要自己编写所有必要的函数——生成随机数并计算标准偏差。
double stDev(const vector<double>& data) {
double mean = std::accumulate(data.begin(), data.end(), 0.0) / data.size();
double sqSum = std::inner_product(data.begin(), data.end(), data.begin(), 0.0);
return std::sqrt(sqSum / data.size() - mean * mean);
}
int main() {
double x_mu = 25;
double x_sigma = 5;
size_t size = 1000;
std::normal_distribution<double> x_distribution(x_mu, x_sigma);
//generate random numbers and store them in a vector
vector<double> data(size);
std::random_device rd;
std::mt19937 gen(rd());
for(size_t i=0; i<size; i++) {
data[i] = x_distribution(gen);
}
double test_distribution = stDev(data);
cout << test_distribution << endl;
return 0;
}
更新: 要获得均值、方差和标准差,您可以创建单独的函数来进行计算。一种可能的实现方式是:
double mean(const vector<double>& data) {
return std::accumulate(data.begin(), data.end(), 0.0) / data.size();
}
double variance(const vector<double>& data) {
double xBar = mean(data);
double sqSum = std::inner_product(data.begin(), data.end(), data.begin(), 0.0);
return sqSum / data.size() - xBar * xBar;
}
double stDev(const vector<double>& data) {
return std::sqrt(variance(data));
}