У меня есть две части кода здесь. выход1 и выход2 идентичны. Первый достигается с помощью базовой функции r lower.tri, которая, как я полагаю, полностью векторизована. Последний получается с помощью цикла for. К моему удивлению, цикл for в два раза быстрее, чем первый метод. Я ожидал, что первый метод будет намного быстрее, особенно с использованием только 20000 элементов. Буду признателен за понимание этого.
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