复数数据下的映射,必须写为标准格式:
vector<complex>转为Eigen::MatrixXcd
int row, col;//要转为MatrixXcd的行数和列数
vector<complex<double>> Blk;
Map<Matrix<complex<double>>> Blk_mat(&Blk[0],row, col);//缺省第四个形参则按列
Map<Matrix<complex<double>, Eigen::Dynamic, Eigen::Dynamic, RowMajor>> Blk_mat(&Blk[0],row, col);//RowMajor按行
若在编译前知道矩阵的维度:
Map<Matrix<complex<double>, 3, 4, RowMajor>> Blk_mat(&Blk[0]);//按行将Blk映射成3行4列的Matrix。
Eigen::MatrixXcd转为vector<complex>
MatrixXcd Blk_mat;
vector<complex<double>> Blk;
Matrix<complex<double>, Eigen::Dynamic, 1>::Map(&Blk[0], Blk.size()) = Blk_mat;
对于非复数形式,可以使用如下方法:
vector<complex>转为Eigen::MatrixXcd
Map<MatrixXd> mat(vec.data(),rows,cols);
Eigen::MatrixXd转为vector
方法一:地址映射
MatrixXd mat(row,col);
vector<double> vec(mat.data(),mat.data+mat.rows()*mat.cols());
方法二:重新开辟空间
MatrixXd mat(row,col);
vector<double> vec;
VectorXd::Map(&vec[0],mat.rows()*mat.cols()) = mat;