2015-11-21 178 views
2

我在我的程序中使用Eigen3的一切與矩陣有關。我知道Eigen使用懶惰評估來優化所有計算。我想知道如果這樣的操作在限制不必要的計算的最優化感:本徵和懶惰評估

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

其中A,B,C是矩陣和d是標量。在英語中,我只需要矩陣產品的一個元素。

謝謝。

回答

3

對於所有係數明智的操作,答案是肯定的。但是,矩陣產品是特殊的,因爲出於效率原因,它們默認情況下是在臨時值內進行評估的。您可以使用lazyProduct執行矩陣乘積的懶評價:

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

對於像A*B*C「三重」產品的情況比較棘手,因爲嵌套的產品總會被(評估,以避免在全身多處的重新評估例如:

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

謝謝你,這正是我正在尋找的東西。據我所知,N個矩陣乘積的推廣是複雜的,不是嗎? (我不需要這個,但是出於好奇) – user2460530