[Numpy-discussion] custom accumlators

Matt Knox mattknox_ca at hotmail.com
Sat Jan 6 00:21:44 CST 2007


> Are you sure about this? I ran this case using timeit, and the first one 
> was 5 times or so *faster* than the second case. I just dug around and 
> frompyfunc is acutally implemented in C, although it has to call back 
> into python to execute the function being vectorized. Can you try using 
> timeit instead of profile and see what you get? For example:
> 
>     a = np.cumprod(1 + np.random.normal(size=10000)/10)
> 
>     if __name__ == '__main__':
>         from timeit import Timer
>         print Timer('expmave1(a, .5)', 'from scratch import np, 
> expmave1, a').timeit(10)
>         print Timer('expmave2(a, .5)', 'from scratch import np, 
> expmave2, a').timeit(10)
> 
> Anyway, I'm glad that all was helpful.
> 
> -tim
> 
> -tim
> 

wow, you're right. Good call. profile and timeit give conflicting results (and 
indeed, the timeit results are more accurate, I made a manual timer to test and 
compared). I'll have to be more careful using profile in the future.

So that's pretty awesome then, a 5 times speed up using frompyfunc and 
accumulate vs the brute force way of doing it. And I think the code looks a 
little nicer too which is always nice. Definitely a technique I will be using 
in the future.

- Matt



More information about the Numpy-discussion mailing list