如果我将3个矩阵相乘,请说ABC。根据矩阵的大小,执行(AB)C或A(BC)可能更有效。如果我评估:
A %*% B %*% C
无论如何都会优化它吗?
答案 0 :(得分:3)
感谢Beauvel上校让我走上正确的道路 - 试试吧。使用wikipedia中的示例并适当地扩展它:
> mult <- 100
> ar <- 10 * mult
> ac <- 30 * mult
> br <- 30 * mult
> bc <- 5 * mult
> cr <- 5 * mult
> cc <- 60 * mult
>
> A <- matrix(rnorm(ar * ac), ar, ac)
> B <- matrix(rnorm(br * bc), br, bc)
> C <- matrix(rnorm(cr * cc), cr, cc)
>
> system.time({ (A %*% B) %*% C })
user system elapsed
3.01 0.00 3.01
> system.time({ A %*% (B %*% C) })
user system elapsed
25.34 0.03 25.37
> system.time({ A %*% B %*% C })
user system elapsed
2.98 0.00 2.98
> system.time({ t(C) %*% t(B) %*% t(A) })
user system elapsed
25.61 0.03 25.64
无意中 - R从左到右进行评估。