2015-04-01 77 views
3

如果我將3個矩陣相乘,就說ABC。根據矩陣的大小,執行(AB)C或A(BC)可能更有效。如果我評估:R是否優化矩陣乘法的順序?

A %*% B %*% C 

這會優化嗎?

+0

我不認爲這是優化。有人可能證明我錯了,但這是對'%*%'函數的兩個不同的調用,我沒有看到解析器應該如何優化它。 – Roland 2015-04-01 11:55:20

回答

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的計算結果從左到右。