我在这里有两个代码。输出1和输出2相同。前者是使用r基本函数lower.tri实现的,我认为它是完全矢量化的。后者是使用for循环获得的。令我惊讶的是,for循环比第一种方法快两倍。我希望第一种方法要快得多,尤其是只有2万个元素时。我希望对此有所了解。
my_vec <- 1:20000
n <- length(my_vec)
a <- Sys.time()
temp_vec <- c(my_vec , 0)
output1 <- matrix(rep(temp_vec, n), ncol = n, nrow = n, byrow = TRUE)
output1[lower.tri(output1)] <- 0
b <- Sys.time()
output2 <- matrix(0, n, n)
output2[1,] <- my_vec
for(i in (n-1):1){
zeros <- rep(0, n-i)
output2[n-i+1,] <- c(zeros, my_vec[1:i])
}
c <- Sys.time()
b-a
c-b