On 2/3/07, Stephen Simmons <[EMAIL PROTECTED]> wrote:

 Hi,

Does anyone know why there is an order of magnitude difference
in the speed of numpy's array.sum() function depending on the axis
of the matrix summed?

To see this, import numpy and create a big array with two rows:
   >>> import numpy
   >>> a = numpy.ones([2,1000000], 'f4')

Then using ipython's timeit function:
                                                  Time (ms)
   sum(a)                                           20
   a.sum()                                           9
   a.sum(axis=1)                                     9
   a.sum(axis=0)                                   159
   numpy.dot(numpy.ones(a.shape[0], a.dtype), a)    15

This last one using a dot product is functionally equivalent
to a.sum(axis=0), suggesting that the slowdown is due to how
indexing is implemented in array.sum().


In this case it is expected. There are inner and outer loops, in the slow
case the inner loop with its extra code is called 1000000 times, in the fast
case, twice. On the other hand, note this:

In [10]: timeit a[0,:] + a[1,:]
100 loops, best of 3: 19.7 ms per loop


Which has only one loop. Caching could also be a problem, but in this case
it is dominated by loop overhead.

Chuck
_______________________________________________
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to