[Numpy-discussion] numpy speed question
Gökhan Sever
gokhansever@gmail....
Thu Nov 25 15:34:24 CST 2010
On Thu, Nov 25, 2010 at 4:13 AM, Jean-Luc Menut <jeanluc.menut@free.fr> wrote:
> Hello all,
>
> I have a little question about the speed of numpy vs IDL 7.0. I did a
> very simple little check by computing just a cosine in a loop. I was
> quite surprised to see an order of magnitude of difference between numpy
> and IDL, I would have thought that for such a basic function, the speed
> would be approximatively the same.
>
> I suppose that some of the difference may come from the default data
> type of 64bits in numpy and 32 bits in IDL. Is there a way to change the
> numpy default data type (without recompiling) ?
>
> And I'm not an expert at all, maybe there is a better explanation, like
> a better use of the several CPU core by IDL ?
>
> I'm working with windows 7 64 bits on a core i7.
>
> any hint is welcome.
> Thanks.
>
> Here the IDL code :
> Julian1 = SYSTIME( /JULIAN , /UTC )
> for j=0,9999 do begin
> for i=0,999 do begin
> a=cos(2*!pi*i/100.)
> endfor
> endfor
> Julian2 = SYSTIME( /JULIAN , /UTC )
> print, (Julian2-Julian1)*86400.0
> print,cpt
> end
>
> result:
> % Compiled module: $MAIN$.
> 2.9999837
>
>
> The python code:
> from numpy import *
> from time import time
> time1 = time()
> for j in range(10000):
> for i in range(1000):
> a=cos(2*pi*i/100.)
> time2 = time()
> print time2-time1
>
> result:
> In [2]: run python_test_speed.py
> 24.1809999943
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
Vectorised numpy version already blow away the results.
Here is what I get using the IDL version (with IDL v7.1):
IDL> .r test_idl
% Compiled module: $MAIN$.
4.0000185
I[10]: time run test_python
43.305727005
and using a Cythonized version:
from math import pi
cdef extern from "math.h":
float cos(float)
cpdef float myloop(int n1, int n2, float n3):
cdef float a
cdef int i, j
for j in range(n1):
for i in range(n2):
a=cos(2*pi*i/n3)
compiling the setup.py file python setup.py build_ext --inplace
and importing the function into IPython
from mycython import myloop
I[6]: timeit myloop(10000, 1000, 100.0)
1 loops, best of 3: 2.91 s per loop
--
Gökhan
More information about the NumPy-Discussion
mailing list