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,有多种方法。 最简单的方法就是循环播放i
和j
,其中一个更好的选项就是类似的
Eigen::MatrixXcd mat(rows, cols); for(int i = 0; i < cols; i++) mat.col(i) = Eigen::Map<Eigen::VectorXcd> (A[i].data(), rows);