【问题标题】:Eigen and std::vector特征和 std::vector
【发布时间】:2016-02-13 14:28:01
【问题描述】:

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

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

【问题讨论】:

  • 为什么首先要有一个向量的向量?
  • 我认为这是一种存储矩阵的简单方法?有什么更好的方法?

标签: c++ eigen


【解决方案1】:

Eigen 使用连续内存,std::vector 也是如此。但是,外部std::vector 包含一组连续的std::vector&lt;std::complex&lt;double&gt; &gt;,每个都指向一组不同的复数(并且可以是不同的长度)。因此,std“矩阵”是不连续的。您可以做的是将数据复制到特征矩阵,有多种方法可以做到这一点。最简单的方法是遍历ij,更好的选择是

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

【讨论】:

    猜你喜欢
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多