如何使用(L,S)应用系列优化R中的慢速嵌套循环?

时间:2016-06-20 16:08:48

标签: r for-loop optimization

以下是一个例子:

function app_output_buffer() {
    ob_start();
} // soi_output_buffer
add_action('init', 'app_output_buffer');

2 个答案:

答案 0 :(得分:4)

您可以使用比循环快得多的%o%。这与使用outer

相同
> 1:7 %o% 1:7 %o% 1:7

> identical(result, 1:7 %o% 1:7 %o% 1:7)

library("microbenchmark")

> microbenchmark(1:7 %o% 1:7 %o% 1:7,    forloop = for(i in 1:7){
+    for(j in 1:7){
+     for(k in 1:7){
+       result[i,j,k] <- i*j*k
+     }
+   }  
+ } )
Unit: microseconds
                expr     min       lq      mean  median       uq      max neval
 1:7 %o% 1:7 %o% 1:7  19.673  21.3000  30.54441  26.030  30.4610  269.072   100
             forloop 680.274 693.1025 730.68298 703.042 716.6775 1367.285   100

答案 1 :(得分:1)

也许你可以使用这个

result <- array(apply(expand.grid(1:7,1:7,1:7),1,prod),c(7,7,7))