我可以訪問大量的矩陣庫,但對於這個項目,我使用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