将矩阵列乘以本征中的向量

时间:2018-10-25 00:10:11

标签: c++ matrix vector eigen

我想将矩阵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 :(得分:1)

嗯...您正在寻找的是普通的标准矢量矩阵乘积:

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

.noalias()是可选的,它只是在这里为您节省一个时间。

如果您确实需要中间矩阵C,则两个选项应该与手工制作的for循环一样快,只要您对其进行纠正以使它们计算出相同的值即可

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

并且不要忘记启用编译器优化,例如-O3 -march=native