Iain Dunning wrote:
>
> Updated gist for the doubly-even order case
> https://gist.github.com/IainNZ/9b5f1eb1bcf923ed02d9
>
 
Nice, thanks for your answers, hints and especially to Iain, thanks for 
your example code. For doubly even numbers it indeed beats Matlab:

*N=3..999, odd numbers only:*

Iain's version: elapsed time: 3.570507583 seconds (1333360560 bytes 
allocated, 7.64% gc time)
Matlab: Elapsed time is 3.026155 seconds.
Python: 1 loops, best of 3: 875 ms per loop

*N=4..1000, doubly even numbers only:*

Iain's version: elapsed time: 0.35992636 seconds (670684544 bytes 
allocated, 38.27% gc time)
Matlab: Elapsed time is 0.961886 seconds.
Python: 1 loops, best of 3: 263 ms per loop

Still, Python (Numpy and cPython, not pypy) clearly performs better for odd 
numbers. I'll look further into that and appreciate any further suggestions 
to improve speed ;) I tried to implement a fast version for the non-doubly 
even numbers at 
https://gist.github.com/phillipberndt/7dc0aed7eb855f900f0d/8611596eebac1291a6e5869242c880fa790d4e1c
 
with these results:

*N=6..998, non-doubly even numbers only*

My new version: elapsed time: 0.988820401 seconds (833368960 bytes 
allocated, 16.78% gc time)
Matlab: Elapsed time is 0.933938 seconds.
Python: 1 loops, best of 3: 503 ms per loop

Did I miss any obvious optimizations in the latter version?

Since you've tested your code with N=10,000, I thought that a comparison 
with large N might also be interesting. For N=9,980..10,000, the latest 
version gives

Iain's & my non-doubly even version: elapsed time: 24.108401104 seconds 
(17764425968 bytes allocated, 1.12% gc time)
Matlab: Elapsed time is 32.327293 seconds.
Python: 1 loops, best of 3: 9.52 s per loop
 
Clearly beats Matlab, but Python's still far ahead.

- Phillip

Reply via email to