3

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;

これを最適化できますか、または複雑なマトリックスを作成するためのより良い方法がありますか?

全体として、コードは次のようになりました。私はアイゲンから何かが欠けているように感じます. 目標は、Complex 表記に変換し、各行から行ごとの平均を減算することでした。

//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++;
4

1 に答える 1

4

以下は、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();
于 2013-01-28T22:30:39.350 に答える