c++ - 对角矩阵的特征使用

标签 c++ performance eigen

使用 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/

相关文章:

c++ - CRC4 INTERLAKEN和ITU查找表生成

C++ 我不断收到 "was not declared in this scope error"

html - Google Page Speed - 这些信息是什么意思?

forms - Angular 2 : Too many components in a module?

c++ - g++ 寄存器分配

java - Channel中如何高效转换字符编码?

c++ - 在 Rcpp 中为 Galerkin 矩阵使用 Eigen c++ 库的问题

c++ - 特征矩阵库索引操作

c++ - 为基本数据类型和 Eigen 数据类型编写模板函数

c++ - 将单独的音频和视频文件合并为一个文件 C++