R是否优化了矩阵乘法的顺序?

时间:2015-04-01 11:20:57

标签: r matrix-multiplication

如果我将3个矩阵相乘,请说ABC。根据矩阵的大小,执行(AB)C或A(BC)可能更有效。如果我评估:

A %*% B %*% C

无论如何都会优化它吗?

1 个答案:

答案 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从左到右进行评估。