楼主: 时光永痕
1256 0

[数据挖掘新闻] 在多处理,R或Python中哪个更快? [推广有奖]

  • 0关注
  • 14粉丝

svip3

学术权威

12%

(VIP/贵宾)八级

4%

威望
0
论坛币
26 个
通用积分
57.2238
学术水平
4 点
热心指数
4 点
信用等级
4 点
经验
34180 点
帖子
2732
精华
0
在线时间
321 小时
注册时间
2020-7-21
最后登录
2024-8-1

楼主
时光永痕 学生认证  发表于 2020-8-31 17:08:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
在多处理,R或Python中哪个更快?
第一个是R中的不同种类的循环。建议根据迭代的复杂性和大小使用不同种类的循环。
第二篇文章是Loop-Runtime Compare R,RCPP,Python,展示了非昂贵任务的并行和顺序处理性能。
这篇文章是关于昂贵的任务。
通常,对于不昂贵的任务,多处理是不合适的。直到一定程度的复杂性,将任务分配到内核(处理器管理)的成本要比按顺序运行循环的成本更高。具体来说,在Python的情况下,这是由于全局解释器锁定(GIL)引起的问题。
面临的挑战是研究哪种(R或Python)更适合处理大量昂贵的任务。为了进行比较,在Python和R中都使用了顺序for循环和多处理。
在这种特定情况下,任务是检查某个数字是否为质数。为了简化,测试从3开始而不是2。
机器是:
             i7 8700k,16Gb GDDR5 RAM
R代码:
################################################ ###############################################
library(parallel)
NumOfCores <-detectCores()-1个
集群<-makeCluster(NumOfCores)
大小<-c(100,1000,10000,20000,30000,40000,50000)
rep <-rep(0,时间=长度(大小))
z = 1
原始<-函数(i){
             chech_vec =(i-1):2
             P = i %% chech_vec
             如果(任何(P == 0)){
                 return(“ n”)
              }其他{
                 return(“ y”)
              }
}
for(大小为j){
             开始= Sys.time()
             PrimNum <-parSapply(cl =簇,X = 3:j,FUN = Prim)
             结束= Sys.time()
             rep [z] =结束-开始
             z = z + 1
}
z = 1
for(大小为j){
             PrimNum = rep(NA,次=(j))
             开始= Sys.time()
             for(3:j中的i){
                 PrimNum [i-2] <-Prim(i)
             }
             结束= Sys.time()
              rep [z] =结束-开始
              z = z + 1
}
################################################ ###############################################
等效的Python代码:
################################################ ################################# ################
导入时间
将numpy导入为np
导入多处理
从joblib导入延迟,并行,parallel_backend
核心= multiprocessing.cpu_count()-1
大小= [101、1001、10001、20001、30001、40001、50001]
rep = [0] * len(大小)
z = 0
def Prim(i):
             chech_vec = list(range(2,(i)))
             P = np.mod(i,chech_vec)
             如果有(P == 0):
                  返回“ n”
             其他:
                  返回“ y”
#更改  inner_max_num_threads没关系。此外,对于此任务,后端“线程”甚至更慢。
对于j的大小:
             开始= time.time()
             如果__name__ ==“ __main__”:
                   与parallel_backend(“ loky”,inner_max_num_threads = 2):
                           PrimNum = Parallel(n_jobs = cores)(i范围(3,j)中的延迟(Prim)
             结束= time.time()
             rep [z] =结束-开始
             z + = 1
z = 0  
对于j的大小:
             PrimNum = [0] * j
             开始= time.time()
             对于范围(3,j)中的i:
                  PrimNum = Prim(i)
             结束= time.time()
             rep [z] =结束-开始
             z + = 1
################################################ ################################# ################
结果是:

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python Parallel Paralle Runtime Library

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 18:49