2015-12-06 55 views
1

假設我只對矩陣產品的單個(i,j)元素感興趣,所以我做(A * B)(i, j)。 Will Eigen會計算AB的完整產品,然後訪問(i,j)元素還是會對它做出明智的決定,並且只計算出必要的因素?如果不是,我能做些什麼呢?我正在做內存原因的基於SVD的有損矩陣壓縮,所以我想存儲SVD的U,S和V矩陣,並在飛行中存儲原始矩陣的計算元素:aij = (U * S.asDiagonal() * V.transpose())(i,j)在此我的問題。臨時矩陣產品的特徵運算符(索引,索引)

回答

1

好問題。以係數方式計算矩陣產品是低效的,並且在當前版本的Eigen中,因此禁止(在編譯時)調用矩陣產品上的調用算子(i,j)。所以如果你訪問大部分的aij,最好是臨時評估它。如果在非結構化的方式訪問它們非常百分之幾,那麼您可以在一個功能包裝它實現:

return U.row(i) * S.asDiagonal() * V.row(j).transpose(); 

在本徵的未來版本,也就是3.3或僅可能3.4,本徵會自動傳播將信息提供給表達式樹的葉子。