2012-10-05 24 views
0

我覺得以下R代碼的速度很好。有沒有辦法使用C++來提高速度?我覺得我的C++代碼不是那麼快。Q.在「R with indicator」和「C++ with」之間的速度爲

#R-code 
> s<-5 
> t<-2 
> y<-c(1,2,3,4,5) 
> r<-c(1,5,5,3,3) 
> 
> sindex<-r[r==s] 
> tindex<-r[r==t] 
> 
> 
> res<-sum(y[sindex])+sum(y[tindex]) 
> 
> sindex 
[1] 5 5 
> tindex 
numeric(0) 
> 
> res 
[1] 10 

#c++ 
res1=0; res2=0; 
for(i=0;i<n;i++){ 
if(r[i]==s){ 
    res1=res1+y[s]; 
} 
if(r[i]==t){ 
    res2=res2+y[t]; 
} 
} 
res=res1+res2 
+1

用你的微不足道的例子,任何加速將是微不足道的。 – mnel

回答

1

R中的矢量化(sum是一個矢量化函數)在後臺運行在C中。通常足夠快...

0

你可以試試這個:

res = 0; 
for (i = 0; i < n; i++) 
    if (r[i] == s || r[i] == t) 
      res += y[i]; // y[s] or y[t] seems incorrect 

不要指望它更加快捷。