lil - 5 months ago 75

C++ Question

The Eigen library can map existing memory into Eigen matrices.

`float array[3];`

Map<Vector3f>(array, 3).fill(10);

int data[4] = 1, 2, 3, 4;

Matrix2i mat2x2(data);

MatrixXi mat2x2 = Map<Matrix2i>(data);

MatrixXi mat2x2 = Map<MatrixXi>(data, 2, 2);

My question is, how can we get c array (e.g. float[] a) from eigen matrix (e.g. Matrix3f m)? What it the real layout of eigen matrix? Is the real data stored as in normal c array?

Answer

You can use the data() member function of the Eigen Matrix class. The layout by default is column-major, not row-major as a multidimensional C array (the layout can be chosen when creating a Matrix object). For sparse matrices the preceding sentence obviously doesn't apply.