2015-11-12 26 views
5

mam matrycę, która jest podana jako:Eigen i std :: vector

std::vector<std::vector<std::complex<double>>> A; 

I chcę mapować że do biblioteki algebry liniowej Eigen jak ten:

Eigen::Map<Eigen::MatrixXcd, Eigen::RowMajor> mat(A.data(),51,51); 

ale kod nie działa z

error: no matching function for call to   
‘Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 1>:: 

Czy mimo przekonwertować wektora wektora tak, że Eigen można go używać?

+1

Dlaczego masz wektor wektorów w pierwszej kolejności? –

+0

Myślałem, że to łatwy sposób na przechowywanie macierzy? Jaki jest lepszy sposób? – user1876942

Odpowiedz

11

Eigen używa ciągłej pamięci, podobnie jak std::vector. Jednak zewnętrzny std::vector zawiera ciągły zestaw std::vector<std::complex<double> >, z których każdy wskazuje inny zestaw liczb zespolonych (i może mieć różną długość). Dlatego std "matryca" nie jest ciągła. Możesz skopiować dane do macierzy Eigen, istnieje wiele sposobów na to. Najprostszym byłoby pętli nad i i j, z lepszym rozwiązaniem będącego czymś w rodzaju

Eigen::MatrixXcd mat(rows, cols); 
for(int i = 0; i < cols; i++) 
    mat.col(i) = Eigen::Map<Eigen::VectorXcd> (A[i].data(), rows); 
Powiązane problemy