使用 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
个对角线系数。
也就是说,调用 A.colwise().squaredNorm()
更简单,Eric 也指出了这一点。
关于c++ - 对角矩阵的特征使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37863668/