特征和标准::向量

Eigen and std::vector

本文关键字:向量 标准 特征      更新时间:2023-10-16

我有一个矩阵,它给出如下:

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 可以使用它?

Eigen 使用连续内存,std::vector 也是如此。然而,外std::vector包含一组连续的std::vector<std::complex<double> >,每个指向一组不同的复数(并且可以是不同的长度(。因此,标准"矩阵"不是连续的。您可以做的是将数据复制到特征矩阵,有多种方法可以做到这一点。最简单的方法是遍历ij,更好的选择是类似

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