Recentemente ho iniziato a utilizzare la libreria . Ho avuto una domanda di mappare una matrice Eigen a un array C/C++. Una matrice Eigen è la colonna maggiore per impostazione predefinita. Quindi, se uso il seguente codice per mappare una matrice a una matrice C/C++,Mappare una matrice Eigen a un array 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;
Il risultato è:
0 1 2 3 4
1 2 3 4 5
0 1 1 2 2 3 3 4 4 5
Se cambio la definizione di m come fila laureato:
Matrix <double,2,5,RowMajor> m;
mi aspettavo l'output è simile al seguente:
0 1 2 3 4
1 2 3 4 5
0 1 2 3 4 1 2 3 4 5
Ma in realtà il risultato era sempre lo stesso del primo. La mia domanda è che c'è un modo per mappare una matrice Eigen a un array C/C++ in modo che i dati dell'array siano basati su una riga?
ho trovato che posso usare la funzione memember matrix.data() per ottenere il risultato desiderato, ma mi chiedo se posso fare questo uso mappa:
Usa matrix.data() funziona:
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;
Questo funziona. Grazie. – Rainfield