我需要在R中快速计算矩阵A = B' C的迹(trace(A))。我能想到最快的方法如下:
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
我在思考是否有更快的方法来计算矩阵A(特别是当矩阵B和矩阵C对称或者幂等时)。我的意思是,通过行
A <- tcrossprod(B,C)
我正在计算整个矩阵A,但我只需要矩阵对角线元素的和(trace(A))。为了加速这个过程,我想到了一个并行计算
tcrossprod
的方法,但我还没有找到实现这个方法的工具(此外,我不知道这是否是一个好主意)。有人有什么想法吗?
A(k) = A(k-1) + crossprod(B,A(k-1))
。并且我需要第k
步中A(k)
的迹。所以如果我使用你的建议:trace(A(k)) = sum(diag(A(k-1)) + sum(A(k-1)*B)
,但是没有完整的矩阵A(k-1)
,那么A(k)
的迹无法计算,对吗?我想我需要编辑我的描述。 - Giuseppesum(t(B) * C)
。 - mbiron