2015-11-12 19 views
5

私はのように与えられる行列、持っている:固有とstd ::ベクトル

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

のようなものであることと、ij上でループするだろうか? –

+0

これは行列を保存する簡単な方法だと思いましたか?より良い方法は何ですか? – user1876942

答えて

11

Eigenは、std::vectorのように連続したメモリを使用します。しかし、外側のstd::vectorは、それぞれが異なる組の複素数を指し示す(また、異なる長さでもよい)連続したの組を含む。したがって、std "行列"は連続していません。あなたができることは、Eigen行列にデータをコピーすることです。これを行うには複数の方法があります。最も簡単なのは、あなたが最初の場所でのベクトルのベクトルを持っているでしょう、なぜ、より良いオプションは

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