В предыдущем посте column vector with row means -- with std::accumulate? я спросил, если это было возможно, используя функциональные возможности STL, для вычисления строк средства матрицывычислительная колонка суммы матричного вектора <вектор <double>> с итераторами?
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();
, где среднее значение не вычисленной внутри каждого 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
Оказывается, совсем другое - накапливаться не хочет работать над векторами векторов. Возможно ли использование накопленного с помощью оператора []
? Я даже не могу придумать промежуточную форму (чтобы избавиться от цикла for i
или for j
), который не кажется правильным.
Что-то с accumulate
и оператором []
? Или bind
?
Если вы считаете, что Анжела Вениамина хорошая (что, кстати, это так), вы должны отметить ее как принятую. – rodrigo
Честно говоря, самая сложная часть этого будет потенциальным коротким вектором в ваших внешних векторах векторов. Это основная проблема при использовании 'vector>'. Нет никакой гарантии, что каждый внутренний вектор имеет одинаковый размер (за исключением, конечно, допущения его в вашем собственном коде, который заполняет эту вещь в первую очередь). Это не проблема при поиске строк, поскольку вам не важно, сколько столбцов есть. –
WhozCraig
так @WhozCraig, вы говорите, что это проблема при поиске столбцов? BTW гарантируется, что размеры внутреннего вектора одинаковы, это не меняется после инициализации. 'Data' - это в основном матрица' rows' x 'columns' –