本征和惰性评估

Eigen and lazy evaluation

我在我的程序中使用 Eigen3 来处理与矩阵相关的所有内容。我知道 Eigen 使用惰性评估来优化所有计算。我想知道这样的操作是否在有限的不必要计算的意义上进行了优化:

D = (A*B*C)(0,0);

其中 A、B、C 是矩阵,D 是标量。英文,我只需要矩阵乘积的一个元素。

谢谢。

对于所有系数运算,答案是肯定的。然而,矩阵产品是特殊的,因为出于效率原因,它们默认在临时产品中评估。您可以使用 lazyProduct:

强制对矩阵乘积进行惰性求值
double ABij = A.lazyProduct(B)(i,j);

对于像 A*B*C 这样的 "triple" 产品,情况更棘手,因为无论如何都会评估嵌套产品(以避免在一般情况下多次重新评估),因此您必须限制它自己,例如:

 A.lazyProduct(B*C.col(j))(i);