将 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;
在这两种情况下,由于惰性求值,您都不会得到任何临时值。
假设我们有一个 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;
在这两种情况下,由于惰性求值,您都不会得到任何临时值。