使用 Eigen,我有一个 Matrix3Xd(3 行,n 列)。我想得到所有列的平方范数
更清楚地说,让我说我有
Matrix3Xd a =
1 3 2 1
2 1 1 4
我想得到每列的平方范数
squaredNorms =
5 10 5 17
我想利用矩阵计算,而不是自己通过 for 循环进行计算。
我想的是
squaredNorms = (A.transpose() * A).diagonal()
这有效,但我担心性能问题:当我只需要对角线时,
A.transpose() * A
将是一个 nxn 矩阵(可能有数百万个元素)。Eigen 是否足够聪明,可以只计算我需要的系数?
在每列上实现 squareNorm 计算的最有效方法是什么?
最佳答案
(A.transpose() * A).diagonal()
的情况由 Eigen 显式处理,以强制对嵌套在对角线 View 中的乘积表达式进行延迟评估。因此,将仅计算 n
所需的对角线系数。
也就是说,正如 Eric 所指出的那样,调用 A.colwise().squaredNorm()
更简单。
关于c++ - 对角矩阵的特征使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37863668/