我正在寻找矩阵a=B'C的迹(迹(a))的R中的快速计算。我能想到的最快方法如下:
set.seed(123)
n <- 10^6
B <- matrix(rnorm(n), ncol=sqrt(n))
C <- matrix(rnorm(n), ncol=sqrt(n))
ptm <- proc.time()
A <- tcrossprod(B,C)
traceA <- sum(diag(A))
proc.time() - ptm
我在问自己是否有更快的方法(特别是如果矩阵B和矩阵C是对称的,甚至是幂等的)。我的意思是,用线A <- tcrossprod(B,C)
,我正在计算整个矩阵A,尽管我只需要矩阵的对角线元素的和(迹(A))。
为了加快速度,我想到了tcrossprod
的并行计算,但我还没有找到它的实现(此外,我不知道这是否是个好主意)。有人有主意吗?
Tr(B'C)只是被视为向量的矩阵B和C的内积。因此
sum(B*C)
在这个例子中,速度快了几个数量级。