将 Matlab 的 bsxfun 转换为 Eigen

Translating Matlab's bsxfun to Eigen

假设我们有一个 MxN 维的矩阵 A 和一个 Mx1 维的向量 a。在 Matlab 中,要将 'a' 与 'A' 的所有列相乘,我们可以做

bsxfun(@times, a, A)

Eigen 中是否有等效的方法,而无需遍历矩阵的列?

我正在努力

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

并希望 Eigen 的惰性求值能够使其更高效。

谢谢!

你可以这样做:

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

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

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

M = a.asDiagonal() * A;

在这两种情况下,由于惰性求值,您都不会得到任何临时值。