1. 数组转化为Eigen::Matrix
int array[9]; cout << "colMajor matrix = \n" << Map<Matrix3i>(array) << endl; // map a contiguous array as a column-major matrix cout << "rowMajor matrix = \n" << Map<Matrix<int, 3, 3, RowMajor>>(array) << endl; // map a contiguous array as a row-major matrix Map<MatrixXi> eigMat1(array, 3, 3); // eigMat1和array指向的是同一个内存空间,是绑定在一起的 MatrixXi eigMat2 = Map<MatrixXi>(array, 3, 3); // eigMat1和array指向不同的内存空间,互不影响
2. Eigen::Matrix转化为数组
Matrix3d eigMat; double* eigMatptr = eigMat.data(); double* eigMatptrnew = new double[eigMat.size()]; Map<MatrixXd>(eigMatptrnew, eigMat.rows(), eigMat.cols()) = eigMat;
3.更多转化
下面的代码是我写的互相转化的测试
#include <iostream> #include <vector> #include <Eigen/Dense> using namespace std; using namespace Eigen; void array2eigenMat(); void eigenMat2array(); void array2eigenVec(); void eigenVec2array(); void vector2eigenMat(); void eigenMat2vector(); void vector2eigenVec(); void eigenVec2vector(); int main() { cout << "hello world" <<endl; array2eigenMat(); eigenMat2array(); array2eigenVec(); eigenVec2array(); vector2eigenMat(); eigenMat2vector(); vector2eigenVec(); eigenVec2vector(); return 0; } void array2eigenMat() { cout << "-------------------------- array2eigenMat --------------------------" << endl; int array[9]; for (int i = 0; i < 9; ++i) array[i] = i; cout << "array = [ "; for (int i = 0; i < 9; ++i) cout << array[i] << " "; cout << "]" << endl; cout << "colMajor matrix = \n" << Map<Matrix3i>(array) << endl; // map a contiguous array as a column-major matrix cout << "rowMajor matrix = \n" << Map<Matrix<int, 3, 3, RowMajor>>(array) << endl; // map a contiguous array as a row-major matrix cout << "stride matrix = \n"