我不知道为什么这样的东西应该很慢: 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.