Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does R optimise the order of matrix multiplications?

If I am multiplying 3 matrices together, say ABC. Depending on the size of the matrices it may be more efficient to perform either (AB)C or A(BC). If I evaluate:

A %*% B %*% C

Will this be optimised in anyway?

like image 363
James Kirkby Avatar asked Oct 24 '25 18:10

James Kirkby


1 Answers

Thanks to Colonel Beauvel for setting me on the right path - just test it. Using the example from wikipedia and scaling it up suitably:

> 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 

Incidently - R evaluates left to right.

like image 148
James Kirkby Avatar answered Oct 26 '25 06:10

James Kirkby