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