跟踪产品矩阵 - 更快的计算?

时间:2013-07-30 15:30:39

标签: r matrix linear-algebra parallel-processing multicore

我正在寻找矩阵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,虽然我只需要矩阵的对角元素之和(trace(A))。

为了加快速度,我想到了tcrossprod的并行计算,但是我没有找到一个实现(另外我不知道这是不是一个好主意)。有人有想法吗?

1 个答案:

答案 0 :(得分:9)

Tr(B'C)只是矩阵B和C的内积,被视为矢量。因此

sum(B*C)

可以解决这个问题,在这个例子中快了几个数量级。