在 C++ 中将数据从 std::vector 复制到 Eigen 的 MatrixXd
Copy data from std::vector to Eigen's MatrixXd in C++
Eigen 是 C++ 中的线性代数库。我的数据(双精度类型)在 std::vector(下面代码中的 DataVector)类型数组中。我尝试使用下面的代码按行复制它,它仍然按列给出结果。
Map<MatrixXd, RowMajor> MyMatrix(DataVector.data(), M, N);
我这里的语法正确吗?
没有。 MatrixXd
对象必须定义为 row/column 专业。请参阅下面的示例。
#include <Eigen/Core>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
std::vector<int> dat(4);
int i = 0;
dat[i] = i + 1; i++;
dat[i] = i + 1; i++;
dat[i] = i + 1; i++;
dat[i] = i + 1;
typedef Eigen::Matrix<int, -1, -1, Eigen::ColMajor> Cm;
Eigen::Map<Cm> m1(dat.data(), 2, 2);
cout << m1 << endl << endl;
typedef Eigen::Matrix<int, -1, -1, Eigen::RowMajor> Rm;
Eigen::Map<Rm> m2(dat.data(), 2, 2);
cout << m2 << endl << endl;
return 0;
}
输出:
1 3
2 4
1 2
3 4
Eigen 是 C++ 中的线性代数库。我的数据(双精度类型)在 std::vector(下面代码中的 DataVector)类型数组中。我尝试使用下面的代码按行复制它,它仍然按列给出结果。
Map<MatrixXd, RowMajor> MyMatrix(DataVector.data(), M, N);
我这里的语法正确吗?
没有。 MatrixXd
对象必须定义为 row/column 专业。请参阅下面的示例。
#include <Eigen/Core>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
std::vector<int> dat(4);
int i = 0;
dat[i] = i + 1; i++;
dat[i] = i + 1; i++;
dat[i] = i + 1; i++;
dat[i] = i + 1;
typedef Eigen::Matrix<int, -1, -1, Eigen::ColMajor> Cm;
Eigen::Map<Cm> m1(dat.data(), 2, 2);
cout << m1 << endl << endl;
typedef Eigen::Matrix<int, -1, -1, Eigen::RowMajor> Rm;
Eigen::Map<Rm> m2(dat.data(), 2, 2);
cout << m2 << endl << endl;
return 0;
}
输出:
1 3
2 4
1 2
3 4