Как мне создать матрицу комплексных чисел в Eigen

У меня есть матрица размером 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 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++;

1 ответ

Решение

Вот более простая версия вашего кода с лучшим использованием 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();
Другие вопросы по тегам