我可以访问许多矩阵库,但是对于这个项目,我使用 Eigen,因为它的编译时定义和它包含 SVD。
现在,我正在执行以下操作:
Eigen::Matrix<double,M,N> A; // populated in the code
Eigen::Matrix<double,N,N> B = A.transpose() * A;
Run Code Online (Sandbox Code Playgroud)
据我了解,这会复制 A 并形成转置,然后再乘以 A。此操作是在相对较小的矩阵 (M=20-30,N=3) 上执行的,但每秒执行数百万次,这意味着它必须尽可能快。
我读到使用以下方法更快:
B.noalias() = A.transpose() * A;
Run Code Online (Sandbox Code Playgroud)
我可以编写自己的子例程,接受 A 作为输入并填充 B,但我想知道是否存在使用最少周期的高效现有实现。