Eigen和std :: vector

我有一个matrix,它给出如下:

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

我想把它映射到Eigen线性代数库如下:

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

但代码失败

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

无论如何转换vector的向量,以便Eigen可以使用它?

Eigen使用连续的内存,就像std::vector 。 然而,外部的std::vector包含一组相连的std::vector<std::complex<double> > ,每个指向一组不同的复数(可以是不同的长度)。 因此,std“matrix”不是连续的。 你可以做的是将数据复制到Eigenmatrix,有多种方法。 最简单的方法就是循环播放ij ,其中一个更好的选项就是类似的

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