Eigen class 取矩阵每一行的平均值(计算列向量的质心)
Eigen class to take mean of each row of matrix (compute Centroid of the column vectors)
我真的是 C++ 的新手,但这是我想做的。我有一个 4 x 3 矩阵:
100 109.523 119.096
100 89.7169 76.256
100 96.0822 103.246
100 101.084 85.0639
我想计算每一行的平均值并将其存储在某个向量中。我正在使用 Eigen 库。我想不出有什么办法可以有效地做到这一点。到目前为止,这是我的代码:
MatrixXd SS(N,n+1);
MatrixXd Z = generateGaussianNoise(N,n);
for(int i = 0; i < N; i++){
SS(i,0) = S0;
for(int j = 1; j <= n; j++){
SS(i,j) = SS(i,j-1)*exp((double) (r - pow(sigma,2.0))*dt + sigma*sqrt(dt)*(double)Z(i,j-1));
}
}
cout << SS << endl;
cout << endl;
VectorXd S_A(3);
S_A = SS.row(1);
所以我有一个 4 x 3 矩阵 SS
,现在我想取每一行的平均值并将其存储在向量 S_A
中。我对此有很多困难,所以任何建议将不胜感激。
找到这个让事情变得非常简单:
Map<RowVectorXd> S_temp(SS.data(), SS.size());
std::vector<double> S_A;
double sum = 0;
// Loop over SS by row:
for (size_t i=0; i < SS.rows(); ++i) {
//clear sum to start over for a given row...
sum=0;
//sum all in a row...
for (size_t j=0; j < SS.cols(); ++j) {
//increase some by matrix entry...
sum+=SS(i,j);
}
//Push average on vector by dividing sum by number of cols. Cast columns to double to divide properly, I think
S_A.push (sum/(double)SS.cols())
}
//S_A has 'row' entries where each is an average a row...
您想要部分减少:
Vector3d S_A = SS.rowwise().mean();
我真的是 C++ 的新手,但这是我想做的。我有一个 4 x 3 矩阵:
100 109.523 119.096
100 89.7169 76.256
100 96.0822 103.246
100 101.084 85.0639
我想计算每一行的平均值并将其存储在某个向量中。我正在使用 Eigen 库。我想不出有什么办法可以有效地做到这一点。到目前为止,这是我的代码:
MatrixXd SS(N,n+1);
MatrixXd Z = generateGaussianNoise(N,n);
for(int i = 0; i < N; i++){
SS(i,0) = S0;
for(int j = 1; j <= n; j++){
SS(i,j) = SS(i,j-1)*exp((double) (r - pow(sigma,2.0))*dt + sigma*sqrt(dt)*(double)Z(i,j-1));
}
}
cout << SS << endl;
cout << endl;
VectorXd S_A(3);
S_A = SS.row(1);
所以我有一个 4 x 3 矩阵 SS
,现在我想取每一行的平均值并将其存储在向量 S_A
中。我对此有很多困难,所以任何建议将不胜感激。
找到这个让事情变得非常简单:
Map<RowVectorXd> S_temp(SS.data(), SS.size());
std::vector<double> S_A;
double sum = 0;
// Loop over SS by row:
for (size_t i=0; i < SS.rows(); ++i) {
//clear sum to start over for a given row...
sum=0;
//sum all in a row...
for (size_t j=0; j < SS.cols(); ++j) {
//increase some by matrix entry...
sum+=SS(i,j);
}
//Push average on vector by dividing sum by number of cols. Cast columns to double to divide properly, I think
S_A.push (sum/(double)SS.cols())
}
//S_A has 'row' entries where each is an average a row...
您想要部分减少:
Vector3d S_A = SS.rowwise().mean();