Я провожу исследование моделирования. У меня есть 2 версии codeа на R
, исходная и улучшенная. Улучшенная версия (которую я попробовал сам) быстрее, чем исходная.
Но какой самый эффективный способ (который может сделать code еще быстрее)... потому что я планировал запускать итерации до 1 миллиона раз. Исходная версия заняла у меня почти 10 часов, а улучшенная — 3,4 часа. Мне определенно нужно улучшить скорость и эффективность до следующего уровня... Нужна помощь :)
Оригинальная :
Измененная :
library(parallel)
library(tidyverse)
library(future.apply)
iterations <- 100
start_time <- Sys.time()
simulation <- function(i) {
alpha = 2
p <- runif(1000, 0, 1)
x <- (-logb(1 - p))^(1 / alpha)
n_x <- length(x)
f = function(par, x, y){
return( -((n_x)*logb(par[1])))
}
result <- optim(c(1), fn = f, x = x)
return(result$par)
}
results_list <- lapply(1:iterations, simulation)
results <- do.call(rbind, results_list)
colnames(results) <- c("alpha")
end_time <- Sys.time()
end_time - start_time
plan(multisession, workers = parallel::detectCores() - 1)
iterations <- 100
start_time <- Sys.time()
simulation <- function(i) {
alpha = 2
p <- runif(1000, 0, 1)
x <- (-logb(1 - p))^(1 / alpha)
n_x <- length(x)
f = function(par, x, y){
return( -((n_x)*logb(par[1])))
}
result <- optim(c(1), fn = f, x = x)
return(result$par)
}
results_list <- future_lapply(1:iterations, simulation)
results <- do.call(rbind, results_list)
colnames(results) <- c("alpha")
end_time <- Sys.time()
end_time - start_time
Стоян
Вопрос задан23 марта 2024 г.