我已经在大矩阵上进行了一些矩阵乘法运算。我注意到如果我有两个矩阵m1
和m2
,如果我先设置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
不幸的是,这个例子并不像我遇到的其他一些例子那样令人震惊,但我认为它仍然说明了这一点。