映射特征矩阵到一个数组c(Map a Eigen Matrix to an C array)

2019-08-03 03:28发布

我最近开始使用本征库。 我得到了一个本征矩阵映射到C / C ++阵列的问题。 一个特征矩阵是默认主修列。 所以,如果我使用下面的代码到一个矩阵映射到C / C ++阵列

double a[10];
double *p = &a[0];
MatrixXd(2,5) m;
for (int i=0; i<2;i++)
    for (int j=0; j<5;j++)
        m(i,j) = i+j;
cout<<m<<endl;
Eigen::Map<MatrixXd>(p,2,5) = m;
for (int i=0; i<10; i++)
    cout<<a[i]<<" ";
cout<<endl;

输出是:

0 1 2 3 4
1 2 3 4 5
0 1 1 2 2 3 3 4 4 5

如果我改变m的定义为行专业:

Matrix <double,2,5,RowMajor> m;

我所期望的输出如下所示:

0 1 2 3 4
1 2 3 4 5
0 1 2 3 4 1 2 3 4 5

但实际上,结果仍是一样的第一个。 我的问题是没有一种方法,使得所述阵列的所述数据是基于行到本征矩阵映射到C / C ++数组?

我发现我可以使用matrix.data()memember函数来获得期望的结果,但我不知道我是否能做到这一点使用地图:

使用matrix.data()的工作原理:

double a[10];
double *p = &a[0];
Matrix <double,2,5,RowMajor> m;
for (int i=0; i<2;i++)
    for (int j=0; j<5;j++)
        m(i,j) = i+j;
double *p1 = m.data();
for (int i=0; i<10; i++)
    cout<<p1[i]<<" ";
cout<<endl;

Answer 1:

这不是矩阵类型m的事项,但在使用的类型Map模板。 你必须改变在使用的类型Map模板被排大。

Eigen::Map<Matrix<double,2,5,RowMajor> >(p,2,5) = m;


文章来源: Map a Eigen Matrix to an C array