2012-11-23 22 views
7

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; 

Odpowiedz

7

To nie jest typ matrycy m że liczy, ale typ używany w szablonie Map. Musisz zmienić typ używany w szablonie Map na wiersz główny.

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

To działa. Dzięki. – Rainfield

Powiązane problemy