[Numpy-discussion] numpy speed question
Dave Hirschfeld
dave.hirschfeld at gmail.com
Thu Nov 25 05:49:57 EST 2010
Jean-Luc Menut <jeanluc.menut <at> free.fr> writes:
>
> I have a little question about the speed of numpy vs IDL 7.0.
>
> Here the IDL 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
>
Whilst you've imported everything from numpy you're not really using numpy -
you're still using a slow Python (double) loop. The power of numpy comes from
vectorising your code - i.e. applying functions to arrays of data.
The example below demonstrates an 80 fold increase in speed by vectorising the
calculation:
def method1():
a = empty([1000, 10000])
for j in range(10000):
for i in range(1000):
a[i,j] = cos(2*pi*i/100.)
return a
#
def method2():
ij = np.repeat((2*pi*np.arange(1000)/100.)[:,None], 10000, axis=1)
return np.cos(ij)
#
In [46]: timeit method1()
1 loops, best of 3: 47.9 s per loop
In [47]: timeit method2()
1 loops, best of 3: 589 ms per loop
In [48]: allclose(method1(), method2())
Out[48]: True
More information about the NumPy-Discussion
mailing list