ben*_*der 3 c++ matlab eigen eigen3
假设我们有一个维度为 MxN 的矩阵 A 和一个维度为 Mx1 的向量 a。在Matlab中,要将“a”与“A”的所有列相乘,我们可以这样做
bsxfun(@times, a, A)
Run Code Online (Sandbox Code Playgroud)
Eigen 中是否有等效的方法,而无需遍历矩阵的列?
我正在尝试做
M = bsxfun(@times, a, A) + bsxfun(@times, a2, A2)
Run Code Online (Sandbox Code Playgroud)
并希望 Eigen 的惰性求值能够使其更加高效。
谢谢!
你可以做:
M = A.array().colwise()*a.array();
Run Code Online (Sandbox Code Playgroud)
需要.array()将运算符 * 的语义重新定义为系数乘积(如果 A 和 a 是不需要的,则不需要Array<>对象则不需要)。
在这种特殊情况下,最好将其编写为缩放操作:
M = a.asDiagonal() * A;
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,由于惰性求值,您都不会得到任何临时的结果。