自己和 std::vector
Eigen and std::vector
我有一个矩阵,给出如下:
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>::
有没有办法转换一个向量的向量,以便 Eigen 可以使用它?
Eigen 使用连续内存,std::vector
也是如此。但是,外部 std::vector
包含一组连续的 std::vector<std::complex<double> >
,每个指向一组不同的复数(并且可以是不同的长度)。因此,std "matrix" 不是连续的。您可以做的是将数据复制到特征矩阵,有多种方法可以做到这一点。最简单的方法是遍历 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);
我有一个矩阵,给出如下:
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>::
有没有办法转换一个向量的向量,以便 Eigen 可以使用它?
Eigen 使用连续内存,std::vector
也是如此。但是,外部 std::vector
包含一组连续的 std::vector<std::complex<double> >
,每个指向一组不同的复数(并且可以是不同的长度)。因此,std "matrix" 不是连续的。您可以做的是将数据复制到特征矩阵,有多种方法可以做到这一点。最简单的方法是遍历 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);