我可以访问大量的矩阵库,但对于这个项目,我使用Eigen,因为它的编译时间定义和包含SVD。现在Eigen中有效的矩阵转置矩阵乘法
,我做以下操作:
Eigen::Matrix<double,M,N> A; // populated in the code
Eigen::Matrix<double,N,N> B = A.transpose() * A;
据我所知,这使得A的副本,并形成转置,这是由一个又成倍增加。这个操作是在相对较小的矩阵(M = 20-30,N = 3)上执行的,但是每秒要执行数百万次,这意味着它必须尽可能快。
,我读了使用下面的更快:
B.noalias() = A.transpose() * A;
我可以写我自己的子程序接受一个作为输入和填充B,但我在想,如果有一个使用一个有效的,现有的实现最少的周期。
考虑看看这个:http://scicomp.stackexchange.com/questions/25283/beating-typical-blas-libraries-matrix-multiplication-performance –
这有帮助吗? http://stackoverflow.com/questions/39606224/does-eigen-have-self-transpose-multiply-optimization-like-h-transposeh – kennytm