7
我最近開始使用Eigen庫。我有一個將特徵矩陣映射到C/C++數組的問題。 Eigen矩陣默認爲列專業。所以,如果我使用下面的代碼到一個矩陣映射到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
但實際上結果仍然與第一個相同。我的問題是,有沒有辦法將Eigen矩陣映射到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;
This Works。謝謝。 – Rainfield