避免2d for循环并使计算更快

时间:2017-03-09 07:02:45

标签: r

考虑示例

m=1000
x=seq(0,1,length.out=m)
y=seq(0,1,length.out=m)
d=runif(500)

想要计算f(x,y)= sum(exp(x-d)* exp(y-d))。

我正在使用

f=array(0,dim=c(m,m))
for (i in 1:m){
 for (j in 1:m){
   f[i,j]=sum(exp(x[i]-d)*exp(y[j]-d))
   }
  }

计算f太耗费时间,因为它运行两个for循环。

有没有更快的方法来完成这项工作?

1 个答案:

答案 0 :(得分:2)

如果我正确地做了你想做的事,你可以通过以下方式达到你想要的结果:

f2<-sum(exp(-2*d))*exp(outer(x,y,"+"))
#check the result
all.equal(f,f2)
#[1] TRUE