Умножить матричные столбцы на вектор в Eigen - PullRequest
0 голосов
/ 25 октября 2018

Я хотел бы умножить столбцы матрицы A на вектор v и, наконец, получить сумму каждого столбца.Я использую библиотеку Eigen и кодирую ее следующим образом:

for (int j = 0 ; j< A.cols(); j++)
    C.col(j).noalias() = V.cwiseProduct(A.col(j));
V2 = C.colwise().sum();

Однако, это все еще медленно.Я также использовал следующие продукты, но они еще медленнее.

1. C = A * V.asDiagonal();
2. C = A.array().rowwise() * V.transpose().array();

Есть идеи?

1 Ответ

0 голосов
/ 25 октября 2018

Хм ... то, что вы ищете, представляет собой простой стандартный векторно-матричный продукт:

V2.noalias() = V.transpose() * A;

.noalias() не является обязательным, он только здесь, чтобы сэкономить вам один временный.

Если вам действительно нужна промежуточная матрица C, то ваши два варианта должны быть одинаково быстрыми, чем ваш ручной цикл for, при условии, что вы исправите их, чтобы они вычисляли одно и то же:

C = V.asDiagonal() * A;
C = A.array().colwise() * V.array();

И не забудьте включить оптимизацию компилятора, например -O3 -march=native.

...