考虑示例
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循环。
有没有更快的方法来完成这项工作?
答案 0 :(得分:2)
如果我正确地做了你想做的事,你可以通过以下方式达到你想要的结果:
f2<-sum(exp(-2*d))*exp(outer(x,y,"+"))
#check the result
all.equal(f,f2)
#[1] TRUE