将Matlab的bsxfun翻译成Eigen

时间:2016-05-12 05:02:31

标签: c++ matlab eigen eigen3

假设我们有一个维数为MxN的矩阵A和一个维数为Mx1的向量a。在Matlab中,要增加' a'使用' A'的所有列,我们可以

bsxfun(@times, a, A)

在Eigen中是否存在等效方法,而不必遍历矩阵的列?

我正在尝试

M = bsxfun(@times, a, A) + bsxfun(@times, a2, A2)

希望Eigen的懒惰评估能让它更有效率。

谢谢!

1 个答案:

答案 0 :(得分:4)

你可以这样做:

M = A.array().colwise()*a.array();

需要.array()来将operator *的语义重新定义为系数方面的产品(如果A和a是Array<>个对象则不需要。)

在这种特殊情况下,最好将其写为缩放操作:

M = a.asDiagonal() * A;

在这两种情况下,你都不会得到任何暂时的评价。