如何从随机分布数据中计算 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));       
}