在上一篇文章中,列向量带有行的意思——使用 std::accumulate? 我问是否可以使用 STL 功能来计算矩阵的行均值
vector< vector<double> > data ( rows, vector<double> ( columns ) );
@benjaminlindley 的最佳答案不仅是我在寻找的东西,而且是美丽的东西。永远充满希望,我认为计算列均值会很容易,所以 STL 相当于
vector<double> colmeans( data[0].size() );
for ( int i=0; i<data.size(); i++ )
for ( int j=0; j<data[i].size(); j++ )
colmeans[j] += data[i][j]/data.size();
其中平均值不是在 each 内部计算vector<double>
,而是在所有向量中的相同索引上计算:
colmeans[0] == ( data[0][0] + data[1][0] + ... data[rows][0] ) / rows
colmeans[1] == ( data[0][1] + data[1][1] + ... data[rows][1] ) / rows
colmeans[2] == ( data[0][2] + data[1][2] + ... data[rows][2] ) / rows
...
colmeans[columns] == ( data[0] [columns] +
data[1] [columns] +
...
data[rows][columns] ) / rows
事实证明这是完全不同的——accumulate 不想处理向量的向量。是否有可能与[]
操作员一起使用累积?我什至无法想出一个看起来不正确的中间形式(摆脱for i
or循环)。for j
accumulate
和[]
运营商有什么关系?或者bind
?