[SciPy-dev] Indexing array performance
Travis Oliphant
oliphant.travis at ieee.org
Sat Dec 31 16:34:48 EST 2005
Francesc Altet wrote:
>Hi,
>
>I'm doing some timings on array indexing feature. It's quite shocking
>to me that, provided empty() and arange() are faster in scipy_core
>than its counterparts in numarray:
>
>In [110]: t1 = timeit.Timer('a=empty(shape=10000);a=arange(10000)','from
>scipy.base import empty, arange')
>
>In [111]: t1.repeat(3,10000)
>Out[111]: [0.74018502235412598, 0.76141095161437988, 0.71947312355041504]
>
>In [112]: t2 = timeit.Timer('a=array(None,shape=10000);a=arange(10000)','from
>numarray import array, arange')
>
>In [113]: t2.repeat(3,10000)
>Out[113]: [2.3724348545074463, 2.4109888076782227, 2.3820669651031494]
>
>however, the next code seems to be slower in scipy_core:
>
>In [114]: t3 = timeit.Timer('a=empty(shape=10000);a[arange(10000)]','from
>scipy.base import empty, arange')
>
>In [115]: t3.repeat(3,1000)
>Out[115]: [3.5126161575317383, 3.5309510231018066, 3.5558919906616211]
>
>In [116]: t4 = timeit.Timer('a=array(None,shape=10000);a[arange(10000)]','from
>numarray import array, arange')
>
>In [117]: t4.repeat(3,1000)
>Out[117]: [2.0824751853942871, 2.1258058547973633, 2.0946059226989746]
>
>
I added a special-case for 1-d indexing that goes through the same code
as a.flat would. The result seems to show a nice speed up for your test
case.
This is not to say that the indexing code could not be made faster, but
that would require more study. Right now, the multidimensional indexing
code is fairly clean as it uses the abstraction of an iterator (which
also makes it hard to figure out how to make it faster). I've been
curious as to how fast the result is.
The results on 2-d indexing are encouraging. They show the scipy_core
code to be faster than the 2-d indexing of numarray (as far as I can
tell). Of course these things can usually be made better, so I'm
hesitant to say we've arrived.
-Travis
More information about the SciPy-Dev
mailing list