C++ 如何在Eigen中创建复数矩阵

C++ 如何在Eigen中创建复数矩阵,c++,matrix,eigen,C++,Matrix,Eigen,我有一个大小为NxM的矩阵,我想创建一个大小为N/2xm的复数矩阵,其中实数是矩阵的左侧,复数部分是右侧 我想到了这个: auto complexmatrix= Shapes.block(0,0,Shapes.rows(),data.cols()) * std::complex<float>(1,0) + Shapes.block(0,data.cols(),Shapes.rows(),data.cols())*std::complex<float>(0,1);

我有一个大小为NxM的矩阵,我想创建一个大小为N/2xm的复数矩阵,其中实数是矩阵的左侧,复数部分是右侧

我想到了这个:

auto complexmatrix= Shapes.block(0,0,Shapes.rows(),data.cols()) * std::complex<float>(1,0) +
    Shapes.block(0,data.cols(),Shapes.rows(),data.cols())*std::complex<float>(0,1);
std::cout << complexmatrix<< std::endl;
auto complexmatrix=Shapes.block(0,0,Shapes.rows(),data.cols())*std::complex(1,0)+
Shapes.block(0,data.cols(),Shapes.rows(),data.cols())*std::complex(0,1);

std::cout这是一个更简单的代码版本,可以更好地使用Eigen:

int cols = 100;
int rows = 100;
MatrixXf Shapes(rows, 2*cols);
MatrixXcf X(rows, cols);
X.real() = Shapes.leftCols(cols);
X.imag() = Shapes.rightCols(cols);
X.array().colwise() -= X.rowwise().mean().array();
int cols = 100;
int rows = 100;
MatrixXf Shapes(rows, 2*cols);
MatrixXcf X(rows, cols);
X.real() = Shapes.leftCols(cols);
X.imag() = Shapes.rightCols(cols);
X.array().colwise() -= X.rowwise().mean().array();