楼主: mysunshine106
1507 2

[问答] 对于这种双重循环怎么改进提高运行速度,论坛币不多见谅 [推广有奖]

  • 1关注
  • 0粉丝

本科生

46%

还不是VIP/贵宾

-

威望
0
论坛币
413 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3062 点
帖子
21
精华
0
在线时间
156 小时
注册时间
2015-7-20
最后登录
2020-3-3

楼主
mysunshine106 发表于 2017-4-19 10:29:21 |AI写论文
2论坛币
dif=function(x,m,n){
  difftime(strptime(x,"%m/%d/%Y %H:%M")[m],strptime(x, "%m/%d/%Y %H:%M")[n],units ="hours")

}
i=j=1
J=matrix(0,500,1);J
for(j in 1:500){
for(i in 1:500){
   A=dif(d,i,1)
     if(as.numeric(A)==2)
     {
       J[i,1]=i
       break}
      else i=i+1
}
j=i
}
J

关键词:论坛币 function numeric matrix break R语言 求助R语言 for循环

沙发
ZhandaYang 发表于 2017-4-19 18:24:27

R语言极其推崇向量计算,因此请尽量使用apply族函数代替for循环
一个for循环例子:
  1. dif <- function(x,y){
  2.   x^y
  3. }

  4. start <- Sys.time()
  5. a <- c()
  6. for(j in 1:200){
  7.   for(i in 1:200){
  8.     A=dif(i,j)
  9.     a <- c(a,A)
  10.   }
  11. }
  12. Sys.time()-start
复制代码
运行时间:Time difference of 10.3093 secs


改为apply方式代替循环:
  1. start <- Sys.time()
  2. grid_mat=expand.grid(1:200, 1:200)
  3. a <- mapply(dif, grid_mat[,1], grid_mat[,2])
  4. Sys.time()-start
复制代码
运行时间:Time difference of 0.06851101 secs


使用矩阵计算思路:
  1. start <- Sys.time()
  2. a <- outer(1:200, 1:200,dif)
  3. Sys.time()-start
复制代码
运行时间:Time difference of 0.003201008 secs


这个例子可以直接使用向量计算:

  1. start <- Sys.time()
  2. grid_mat=expand.grid(1:200, 1:200)
  3. b <- grid_mat[,1]^grid_mat[,2]
  4. Sys.time()-start
复制代码
运行时间:Time difference of 0.004472971 secs

藤椅
mysunshine106 发表于 2017-5-20 10:04:32
不懂。。。。。。。

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

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