zoukankan      html  css  js  c++  java
  • R语言多线程运算(解决R循环慢的问题)【转载】

    已经大半年没有更新博客了。。最近都跑去写分析报告半年没有R

    这次记录下关于R循环(百万级以上)死慢死慢的问题,这个问题去年就碰到过,当时也尝试过多线程,but failed......昨天试了下,终于跑通了,而且过程还挺顺利

    step1

    先查下自己电脑几核的,n核貌似应该选跑n个线程,线程不是越多越好,线程个数和任务运行时间是条开口向下的抛物线,最高点预计在电脑的核数上。detectCores( )检查当前电脑可用核数  我的是4所以step2选的是4

    library(parallel)
    cl.cores <- detectCores()

    step 2

    多线程计算

    setwd("C:\Users\siyuanmao\Documents\imdada\0-渠道投放和新人券联动模型\测算")
    options(scipen=3)  ##取消科学计数法
    channel_ad_ios_data<-seq(0,50000,5000)
    channel_ad_android_data<-seq(0,100000,10000)

    library(parallel)

    func <- function(n){#n=1
      result_data<-read.csv("发券方案.csv",stringsAsFactors=FALSE)
      total_coupon_solution_data<-read.csv("结果表框架.csv",stringsAsFactors=FALSE)
      coupon_solution_data<-subset(result_data,solution== paste('方案',n,sep=""))
     
      for (i in 1:11){#i=3
        coupon_solution_data$channel_ad_cost[3]<-5000*(i-1)
        
        for (j in 1:11){#j=5
          coupon_solution_data$channel_ad_cost[4]<-10000*(j-1)
          solution_mark<-paste('方案',n,i,j,sep="-")
          coupon_solution_data$solution<-solution_mark
          
          total_coupon_solution_data<-rbind(total_coupon_solution_data,coupon_solution_data)
        }
      }
      print(solution_mark)
      return(total_coupon_solution_data)
    }

    #func(10)
    system.time({
    x <- 1:7776
    cl <- makeCluster(4) # 初始化四核心集群
    results <- parLapply(cl,x,func) # lapply的并行版本
    res.df <- do.call('rbind',results) # 整合结果
    stopCluster(cl) # 关闭集群
    })


    df=as.data.frame(res.df)

    原来非多线程的时候,我预计要跑12个小时以上,电脑发出呼呼~~的响声,查了下Python循环会快点,然后改为python版(已经很久没有用了,连个range都不会写,摸索了大半天才改好,但是速度还是慢==),于是改成多线程,运行25分钟就出结果了~~
    ---------------------
    作者:小酥饼maomao
    来源:CSDN
    原文:https://blog.csdn.net/u011454283/article/details/77920833
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    UVA12125 March of the Penguins (最大流+拆点)
    UVA 1317 Concert Hall Scheduling(最小费用最大流)
    UVA10249 The Grand Dinner(最大流)
    UVA1349 Optimal Bus Route Design(KM最佳完美匹配)
    UVA1212 Duopoly(最大流最小割)
    UVA1395 Slim Span(kruskal)
    UVA1045 The Great Wall Game(二分图最佳匹配)
    UVA12168 Cat vs. Dog( 二分图最大独立集)
    hdu3488Tour(KM最佳完美匹配)
    UVA1345 Jamie's Contact Groups(最大流+二分)
  • 原文地址:https://www.cnblogs.com/purple5252/p/11193040.html
Copyright © 2011-2022 走看看