Собственная библиотека, умножьте столбцы матрицы на квадратную матрицу

Я хочу преобразовать каждый столбец матрицы M с помощью оператора N. Эйген позволяет выразить это в терминах предварительного умножения:

M.colwise() *= N;

Но умножение M_j * N математически не определено.

Есть ли способ избежать написания цикла?

0

Решение

Если вы хотите умножить каждый столбец M от N слева просто выполните обычное умножение матрицы на матрицу:

M = N * M;

Это оценит N*M во временный, который затем перемещается в M,
Если вы делаете это много и хотите повторно использовать выделенную память для этого, объявите временную матрицу M_temp где то раньше и пиши

M_temp.noalias() = N * M;
M.swap(M_temp);  // M_temp has the old memory of M; Swapping is O(1)

Если вы боитесь слишком большого потребления памяти, вы можете написать что-то вроде

for(long i=0; i<M.cols()-3; i+=4)
M.middleCols<4>(i) = N * M.middleCols<4>(i);
M.rightCols(M.cols()%4) = N * M.rightCols(M.cols()%4);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector