[R] Odp: optimizing speed of calculation (recursive product)

Wolfgang Raffelsberger wraff at titus.u-strasbg.fr
Wed Sep 3 19:25:22 CEST 2008


Dear Uwe, Petr and Berend,
 Thank's a lot !!

I just checked and it's
 c(cumprod(a)[M-1],cumprod(a[-1])[M-1]))

that gives an identical result to the my initial loop (at 10x speed of 
my initial loop ... )

Wolfgang

Berend Hasselman a écrit :
> Petr Pikal wrote:
>   
>> Hi
>>
>> r-help-bounces at r-project.org napsal dne 03.09.2008 16:39:07:
>> ....
>>     
>>> In many cases I've noticed that using apply, sapply etc can help 
>>> speeding up processes, but in this case I don't see how I could do so.
>>>
>>> a <- runif(10000000,0.5,1.6)
>>> C <- 2
>>> M <- 10000000
>>> system.time( for (i in 1:(M-1)) {C <- C* c(a[i],a[i+1])} )
>>>       
>> Maybe simple math? You want last two members of 2*cumprod(a).
>>
>> So
>>
>>     
>>> system.time(2*cumprod(a)[9999999:10000000])
>>>       
>>    user  system elapsed 
>>    1.97    0.04    2.00 
>>     
>> shall be a little bit quicker then for cycle. But it is valid only for the 
>> above calculation.
>>
>>     
>
> I think
>
> 2*c(cumprod(a)[M-1],cumprod(a[-1])[M-1])
>
> is the answer.
>
> Berend
>   


-- 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Wolfgang Raffelsberger, PhD
Laboratoire de BioInformatique et Génomique Intégratives
CNRS UMR7104, IGBMC 
1 rue Laurent Fries,  67404 Illkirch  Strasbourg,  France
Tel (+33) 388 65 3300         Fax (+33) 388 65 3276
http://www-bio3d-igbmc.u-strasbg.fr/~wraff
wolfgang.raffelsberger at igbmc.fr



More information about the R-help mailing list