all*_*ije 5 c++ stl vector mean accumulate
为了尽可能地懒惰,我在矩阵中读到了
vector< vector<double> > data ( rows, vector<double> ( columns ) );
Run Code Online (Sandbox Code Playgroud)
并尝试尽可能多地使用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();
Run Code Online (Sandbox Code Playgroud)
在In C++中,如何使用向量视图和gsl_stats_mean计算整数向量的均值?它解释了对于数字向量,您可以在一行中计算向量均值,而无需在每一步调用size()运算符:
double mean = std::accumulate(stl_v.begin(), stl_v.end(), 0.0) / stl_v.size();
Run Code Online (Sandbox Code Playgroud)
是否可以在向量向量上使用这些迭代器?中间形式是
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();
Run Code Online (Sandbox Code Playgroud)
已经1线走了!但是使用STL函数也可以摆脱[i]索引吗?(在顶层,这只是收集行的意思).
Ben*_*ley 11
std::transform(data.begin(), data.end(), rowmeans.begin(),
[](std::vector<double> const& d) {
return std::accumulate(d.begin(), d.end(), 0.0) / d.size();
});
Run Code Online (Sandbox Code Playgroud)
虽然,我的个人风格会涉及一个名为lambda或函数,因为我会发现更多自我记录:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2058 次 |
| 最近记录: |