首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Boost计算C++中样本向量的均值和标准差

使用Boost计算C++中样本向量的均值和标准差
EN

Stack Overflow用户
提问于 2011-10-01 05:59:41
回答 6查看 170.6K关注 0票数 97

有没有办法使用Boost计算包含样本的向量的均值和标准差?

或者我必须创建一个累加器并将向量输入其中?

EN

回答 6

Stack Overflow用户

发布于 2018-08-13 21:31:21

the answer by musiphil进行了改进,您可以在没有临时向量diff的情况下编写标准差函数,只需使用一个带有C++11 lambda功能的inner_product调用:

代码语言:javascript
复制
double stddev(std::vector<double> const & func)
{
    double mean = std::accumulate(func.begin(), func.end(), 0.0) / func.size();
    double sq_sum = std::inner_product(func.begin(), func.end(), func.begin(), 0.0,
        [](double const & x, double const & y) { return x + y; },
        [mean](double const & x, double const & y) { return (x - mean)*(y - mean); });
    return std::sqrt(sq_sum / func.size());
}

我怀疑多次做减法比消耗额外的中间存储更便宜,而且我认为它更具可读性,但我还没有测试它的性能。

票数 6
EN

Stack Overflow用户

发布于 2019-03-14 14:04:53

以下优雅的递归解决方案似乎没有被提及,尽管它已经存在了很长一段时间。参考Knuth的计算机编程艺术,

代码语言:javascript
复制
mean_1 = x_1, variance_1 = 0;            //initial conditions; edge case;

//for k >= 2, 
mean_k     = mean_k-1 + (x_k - mean_k-1) / k;
variance_k = variance_k-1 + (x_k - mean_k-1) * (x_k - mean_k);

然后,对于n>=2值列表,标准差的估计值为:

代码语言:javascript
复制
stddev = std::sqrt(variance_n / (n-1)). 

希望这能有所帮助!

票数 4
EN

Stack Overflow用户

发布于 2015-04-22 20:38:25

我的答案与Josh Greifer类似,但推广到样本协方差。样本方差只是样本协方差,但两个输入相同。这包括贝塞尔的相关性。

代码语言:javascript
复制
    template <class Iter> typename Iter::value_type cov(const Iter &x, const Iter &y)
    {
        double sum_x = std::accumulate(std::begin(x), std::end(x), 0.0);
        double sum_y = std::accumulate(std::begin(y), std::end(y), 0.0);

        double mx =  sum_x / x.size();
        double my =  sum_y / y.size();

        double accum = 0.0;

        for (auto i = 0; i < x.size(); i++)
        {
            accum += (x.at(i) - mx) * (y.at(i) - my);
        }

        return accum / (x.size() - 1);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7616511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档