前の投稿の列ベクトルでは、行を意味します -- with 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
?