2015-11-12 65 views
5

我有一个矩阵,这是考虑为:征和std :: vector的

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

我想映射到本征线性代数库是这样的:

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>:: 

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

+1

为什么你会矢量摆在首位的载体? –

+0

我认为这是一种存储矩阵的简单方法?什么是更好的方法? – user1876942

回答

11

Eigen使用连续内存,正如std::vector一样。但是,外部std::vector包含一组连续的std::vector<std::complex<double> >,每个指向一组不同的复数(并且可以是不同的长度)。因此,std“矩阵”不是连续的。你可以做的是将数据复制到Eigen矩阵,有多种方法可以做到这一点。最简单的将是环比ij,有一个更好的选择是像

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