当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – R嵌套循环缓慢

来源:互联网 收集:自由互联 发布时间:2021-06-22
我不知道为什么这样的东西应该很慢: steps=500samples=100000s_0=2.1r=.02sigma=.2k=1.9at-matrix(nrow=(steps+1),ncol=samples)at[1,]=s_0for(j in 1:samples){ for(i in 2:(steps+1)) { at[i,j]=at[(i-1),j] + sigma*sqrt(.0008)*rnorm(1
我不知道为什么这样的东西应该很慢:

steps=500
samples=100000
s_0=2.1
r=.02
sigma=.2
k=1.9

at<-matrix(nrow=(steps+1),ncol=samples)
at[1,]=s_0

for(j in 1:samples)
{
  for(i in 2:(steps+1))
  {
    at[i,j]=at[(i-1),j] + sigma*sqrt(.0008)*rnorm(1)
  }
}

我尝试使用sapply重写它,但从性能角度来看仍然很糟糕.

我在这里错过了什么吗?这可能是c中的秒数,甚​​至是膨胀的c#.

R可以矢量化某些操作.在您的情况下,您可以通过执行以下更改来摆脱外部循环.

for(i in 2:(steps + 1))
{
    at[i,] = at[(i - 1),] + sigma * sqrt(.0008) * rnorm(samples)
}

根据system.time,samples = 1000的原始版本需要6.83s,而修改后的版本需要0.09s.

网友评论