特征和懒惰评价

Eigen and lazy evaluation

本文关键字:评价 特征      更新时间:2023-10-16

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

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

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

谢谢。

对于所有系数运算,答案都是肯定的。然而,矩阵产品是特殊的,因为出于效率的原因,它们默认在临时范围内进行评估。您可以使用lazyProduct:强制执行矩阵乘积的延迟求值

double ABij = A.lazyProduct(B)(i,j);

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

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