为什么tcrossprod()比矩阵乘法的%*%更快?

时间:2017-02-09 20:57:01

标签: r matrix

我已经在大矩阵上进行了一些矩阵乘法运算。我注意到如果我有两个矩阵m1m2,如果我先设置m3 <- t(m2),那么tcrossprod(m1, m3)的速度比m1 %*% m2快。那是为什么?

示例

set.seed(2017)
m1 <- matrix(runif(n=100000), nrow=10000, ncol=10000)
m2 <- matrix(runif(n=50000), nrow=10000, ncol=5)
m3 <- t(m2)

# check for equality
all.equal(m1 %*% m2, tcrossprod(m1, m3))

# timings
library(microbenchmark)
microbenchmark(
  m1 %*% m2, 
  tcrossprod(m1, m3)
)

Unit: milliseconds
          expr      min       lq     mean   median       uq      max neval cld
 mult1(m1, m2) 438.9080 458.5851 480.7021 479.6811 494.1340 644.6663   100   b
 mult2(m1, m3) 370.4765 391.8060 406.1318 403.1972 416.1648 591.8057   100  a 

不幸的是,这个例子并不像我遇到的其他一些例子那样令人震惊,但我认为它仍然说明了这一点。

0 个答案:

没有答案