Умножение на диагностическую матрицу (представленную как вектор) в Eigen - PullRequest
0 голосов
/ 21 января 2020

Учитывая матрицу A и вектор d, который представляет диагональ диагональной матрицы D, что было бы лучшим (то есть самым простым без ущерба для производительности) Собственным выражением для D *A в терминах только d и A?

Построение D (в виде плотной матрицы) и выполнение D*A кажется неэффективным, поскольку это потребует ненужных умножений на ноль. Строки A просто нужно масштабировать с помощью соответствующих элементов d.

Должен ли я преобразовывать в массив и масштабировать строки, или Eigen предусматривает построение и умножение диагональных матриц что позволяет избежать ненужных накладных расходов?

1 Ответ

3 голосов
/ 21 января 2020

Вы можете использовать Eigen::DiagonalMatrix, как предложено Damien . В качестве альтернативы, если вы уже получили Eigen::Vector (или Map), вы можете использовать d.asDiagonal() следующим образом:

Eigen::VectorXf d;
Eigen::MatrixXf a, b;
b = d.asDiagonal() * a;
...