与排列向量表示 - 用的std ::积累?(column vector with row means

2019-08-17 00:34发布

在努力尽可能我读懒惰的矩阵

vector< vector<double> > data ( rows, vector<double> ( columns ) );

并尝试使用尽可能多的STL的好东西,我可以。

有一件事我下一步需要做的是计算该行的手段。 在C风格的节目,这将是

vector<double> rowmeans( data.size() );
for ( int i=0; i<data.size(); i++ )
    for ( int j=0; j<data[i].size(); j++ )
        rowmeans[i] += data[i][j]/data[i].size();

在C ++中,如何计算使用矢量视图和gsl_stats_mean整数向量的均值? 它解释说,数字向量可以计算在一个线路的向量意味着没有调用在每一步的大小()操作:

double mean = std::accumulate(stl_v.begin(), stl_v.end(), 0.0) / stl_v.size();

是否有可能在载体的载体将这些迭代器? 的中间形式是

vector<double> rowmeans( rows );
    for ( int i=0; i<data.size(); i++ )
        rowmeans[i] = std::accumulate(data[i].begin(), data[i].end(), 0.0) / data[i].size();

已经1线了! 但使用STL的功能是它可以摆脱[I]指标呢? (在顶层,它只是一个收集的行手段的物质)。

Answer 1:

std::transform(data.begin(), data.end(), rowmeans.begin(),
    [](std::vector<double> const& d) {
        return std::accumulate(d.begin(), d.end(), 0.0) / d.size();
    });

虽然,我的个人风格,将包括一个名为拉姆达或功能,因为我会找到更多的自我记录:

auto Mean = [](std::vector<double> const& d) { return std::accumulate(d.begin(), d.end(), 0.0) / d.size(); };
std::transform(data.begin(), data.end(), rowmeans.begin(), Mean);


Answer 2:

使用boost::numeric::ublas但是(如果它是一个选项):

matrix<double> m(rows,columns);
double mean = accumulate(m.data().begin(),m.data().end(),0,std::max<double>) / (rows * columns);


文章来源: column vector with row means — with std::accumulate?