Bas*_*oud 4 c++ performance eigen
使用Eigen,我有一个Matrix3Xd(3行,n列).我想得到所有列的平方范数
更清楚,让我说我有
Matrix3Xd a =
1 3 2 1
2 1 1 4
Run Code Online (Sandbox Code Playgroud)
我想得到每列的平方范数
squaredNorms =
5 10 5 17
Run Code Online (Sandbox Code Playgroud)
我想利用矩阵计算而不是通过for循环自己进行计算.
我的意思是
squaredNorms = (A.transpose() * A).diagonal()
Run Code Online (Sandbox Code Playgroud)
这有效,但我担心性能问题:A.transpose() * A当我只需要对角线时,它将是一个nxn矩阵(可能是数百万个元素).
Eigen足够聪明,只计算我需要的系数吗?在每列上实现squareNorm计算的最有效方法是什么?
(A.transpose() * A).diagonal()Eigen明确处理该情况,以强制对嵌套在对角线视图中的产品表达式进行惰性求值.因此,仅n计算所需的对角线系数.
也就是说,A.colwise().squaredNorm()如Eric 所说,打电话更简单.
| 归档时间: |
|
| 查看次数: |
763 次 |
| 最近记录: |