特征和懒惰的评价

时间:2015-11-21 14:11:38

标签: c++ eigen3

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

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