在尝试优化和对函数进行基准测试时,我能够将3个for循环缩减为1个简短的subprocess.check_output
调用,但是函数变慢了。
我试图理解为什么会发生这种情况,就像在3个循环中一样,我预先分配了3个具有相同长度的列表,并将它们填充到3个不同的循环中,这似乎没有必要且效率低下。
lapply
答案 0 :(得分:0)
您确定这些时差是如此重要吗?
library(microbenchmark)
# mut2 = sapply(1:400, function(i) sample(c(0,1), size = nrow(Grid), replace = T))
mc = microbenchmark(
loop = getRects(mut2, Grid),
lap1 = getRects1(mut2, Grid),
lap2 = getRects2(mut2, Grid),
lap3 = getRects3(mut2, Grid)
)
mc
#> Unit: milliseconds
#> expr min lq mean median uq max neval
#> loop 2.651485 2.699166 3.195301 2.756171 3.136741 8.010173 100
#> lap1 2.755571 2.828128 3.098850 2.877806 3.012487 7.427598 100
#> lap2 2.737105 2.808924 3.118260 2.863221 2.939996 13.706736 100
#> lap3 2.719101 2.787040 3.191893 2.852963 3.004811 8.490867 100