Rai*_*eld 7 c++ arrays matrix eigen
我最近开始使用Eigen库.我有一个将特征矩阵映射到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;
Run Code Online (Sandbox Code Playgroud)
输出是:
0 1 2 3 4
1 2 3 4 5
0 1 1 2 2 3 3 4 4 5
Run Code Online (Sandbox Code Playgroud)
如果我将m的定义更改为行主要:
Matrix <double,2,5,RowMajor> m;
Run Code Online (Sandbox Code Playgroud)
我希望输出看起来像这样:
0 1 2 3 4
1 2 3 4 5
0 1 2 3 4 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
但实际上结果仍然与第一个相同.我的问题是有没有办法将特征矩阵映射到C/C++数组,以便数组的数据是基于行的?
我发现我可以使用matrix.data()memember函数来获得所需的结果,但我想知道我是否可以使用map:
使用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;
Run Code Online (Sandbox Code Playgroud)
重要的不是矩阵m的类型,而是Map模板中使用的类型.您必须将Map模板中使用的类型更改为行主要.
Eigen::Map<Matrix<double,2,5,RowMajor> >(p,2,5) = m;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5983 次 |
| 最近记录: |