假设我们有一个 MxN 维的矩阵 A 和一个 Mx1 维的 vector 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;
在这两种情况下,由于惰性求值,您都不会得到任何临时值。
关于c++ - 将 Matlab 的 bsxfun 转换为 Eigen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37177663/