Niedawno zacząłem korzystać z biblioteki Eigen. Mam pytanie o mapowanie macierzy Eigen na tablicę C/C++. Macierz Eigen jest kolumną wyspecjalizowaną domyślnie. Jeśli więc użyć tego kodu, aby mapować matrycę do C/C++ tablicyMapowanie macierzy genetycznej na macierz 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;
wyjście jest:
0 1 2 3 4
1 2 3 4 5
0 1 1 2 2 3 3 4 4 5
Jeśli zmiany definicji m w rzędzie na kierunku:
Matrix <double,2,5,RowMajor> m;
spodziewałem wyjście wygląda następująco:
0 1 2 3 4
1 2 3 4 5
0 1 2 3 4 1 2 3 4 5
Jednak wynik był wciąż taki sam jak pierwszego. Moje pytanie brzmi: czy istnieje sposób odwzorowania macierzy Eigen na tablicę C/C++, tak aby dane tablicy były oparte na wierszach?
odkryłem, że mogę korzystać z matrix.data() Funkcja memember aby uzyskać pożądany wynik, ale zastanawiam się, czy mogę to zrobić użyj mapę:
Używaj matrix.data() działa:
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;
To działa. Dzięki. – Rainfield