6

我正在寻找矩阵A = B'C的迹线(trace(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,但我还没有找到一个实现(另外我不知道这是否是一个好主意)。有人有想法吗?

4

1 回答 1

10

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

sum(B*C)

成功了,在这个例子中速度快了几个数量级。

于 2013-07-30T15:42:47.530 回答