2017-05-16 43 views
0

我是Eigen的新手,想要感受一下佈局。我注意到每個矩陣都有一個sum()函數,它返回給定矩陣中所有係數的和。我對它是如何實現感興趣,因爲我想找到通過特徵矩陣循環的最佳方式。我進入源代碼並在「DenseBase.h」中找到以下界面: EIGEN_DEVICE_FUNC Scalar sum() const; 也許我誤解了Eigen的設計方式,但我認爲所有功能都是在其頭文件中定義的。我還查看了「Matrix.h」和「MatrixBase.h」,但無法找到實現。在哪個頭文件中定義?特徵源中的哪個是爲特定矩陣定義的sum()函數?

回答

2

sum()功能來自Eigen::internal::scalar_sum_op<Scalar>()在Redux.h中通過redux調用。 scalar_sum_op在Functors.h中定義。之後,我失去了興趣。我發現了這兩種方法。首先是使用Visual Studio,右鍵點擊sum()並選擇「轉到定義」,跟蹤直到我滿意爲止。第二個是使用grep搜索sum()並再次跟蹤。

如果您通過Redux.h閱讀,您會感受到開發人員如何做到這一點。他們花費相當大的力氣進行矢量化和展開,以使它們快速工作。我會說通過Eigen矩陣循環的最佳方式是使用提供的接口來執行您想要的操作。我懷疑你有一個沒有被界面覆蓋的用例。

+1

對,我確認相關的一段代碼在'src/Core/Redux.h'中,但你絕對不想重現它,只需調用'mat.redux(...)'自己的仿函數,以防它已經被Eigen的API覆蓋。 – ggael