我有一个大小为 NxM 的矩阵,并想创建一个大小为 N/2 x M 的复数矩阵,其中实数是矩阵的左侧,复数部分是右侧。
我想出了这个:
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;
这可以优化还是有更好的方法来创建复杂的矩阵。
总而言之,代码最终是这样的。感觉就像我从 Eigen 中遗漏了一些东西。目标是转换为复杂符号并从每一行中减去逐行平均值。
//Complex notation and Substracting Mean.
Eigen::MatrixXcf X = Shapes.block(0,0,Shapes.rows(),data.cols()) * std::complex<float>(0,1) +
Shapes.block(0,data.cols(),Shapes.rows(),data.cols())*std::complex<float>(1,0);
Eigen::VectorXcf Mean = X.rowwise().mean();
std::complex<float> *m_ptr = Mean.data();
for(n=0;n<Mean.rows();++n)
X.row(n) = X.row(n).array() - *m_ptr++;