【问题标题】:Estimate the Expected Run Time of a loop or nested loops估计循环或嵌套循环的预期运行时间
【发布时间】:2021-05-07 04:43:03
【问题描述】:

我正在使用 R 编程语言。我很想知道是否有一种方法可以在不实际运行该过程的情况下估计一个过程的实际运行时间(相对于您的计算机的“强度”)。

例如,假设我想确定以下过程在我的计算机上运行需要多长时间:

 library(caret)
    library(rpart)

#generate data

a = rnorm(80000, 10, 10)
b = rnorm(80000, 10, 5)
c = rnorm(80000, 5, 10)
group <- sample( LETTERS[1:2], 80000, replace=TRUE, prob=c(0.5,0.5))
group_1 <- 1:80000

#put data into a frame
d = data.frame(a,b,c, group, group_1)
d$group = as.factor(d$group)

e <- d
vec1 <- sample(200:300, 5)
vec2 <- sample(400:500,5)
vec3 <- sample(700:800,5)
z <- 0
df <- expand.grid(vec1, vec2, vec3)
df$Accuracy <- NA

for (i in seq_along(vec1)) { 
    for (j in seq_along(vec2)) {
        for (k in seq_along(vec3)) {
            # d <- e
            d$group_2 = as.integer(ifelse(d$group_1 < vec1[i] , 0, ifelse(d$group_1 >vec1[i]  & d$group_1 < vec2[j] , 1, ifelse(d$group_1 >vec2[j]  & d$group_1 < vec3[k] , 2,3))))
            
            d$group_2 = as.factor(d$group_2)
            
            
            
            TreeFit <- rpart(group_2 ~ ., data = d[,-5])
            
            pred <- predict(
                TreeFit,
                d[,-5], type = "class")
            
            con <- confusionMatrix(
                d$group_2,
                pred) 
            
            #update results into table
            #final_table[i,j] = con$overall[1]
            z <- z + 1
            df$Accuracy[z] <- con$overall[1]
        }
    }
}

head(df)

我可以将这个过程“夹在”下面的代码行之间,并确定花费了多长时间

start_time <- proc.time()

#copy and paste the entire block of code here

 proc.time() - start_time

#results

 user  system elapsed 
  51.86    0.36   52.22 

但是假设这是一个非常漫长的过程,我想粗略估计一下我的计算机在实际运行之前需要多长时间 - 这可能吗?

谢谢

【问题讨论】:

    标签: r loops time runtime systemtime


    【解决方案1】:

    由于您使用的是嵌套循环,因此不要对整个事情进行计时,而是尝试对循环的第一次或少量迭代进行计时..

    例如而不是

    for (i in seq_along(vec1)) { 
        for (j in seq_along(vec2)) {
            for (k in seq_along(vec3)) {
    

    尝试仅沿每个元素的前几个元素进行迭代

    for (i in seq_along(vec1[1:3])) { 
        for (j in seq_along(vec2[1:3])) {
            for (k in seq_along(vec3[1:3])) {
    

    或任何对您的用例有意义的东西。

    一旦您知道一小部分数据的时间,您就可以对较大数据集可能需要多长时间做出有根据的猜测。

    【讨论】:

    • 谢谢!这就是我的想法......我不确定我是否可以这样解决问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多