(E-Mail Removed) wrote:

> Colin> ... perhaps faster than numpy:

> ...

>

> For extremely short lists, but not for much else:

>

> % for n in 1 10 100 1000 10000 100000 ; do

> > echo "len:" $n

> > echo -n "numpy: "

> > python -m timeit -s 'import numpy ; a = numpy.array(range('$n'))' 'a*3'

> > echo -n "list: "

> > python -m timeit -s 'a = range('$n')' '[3*x for x in a]'

> > done

> len: 1

> numpy: 100000 loops, best of 3: 11.7 usec per loop

> list: 1000000 loops, best of 3: 0.698 usec per loop

> len: 10

> numpy: 100000 loops, best of 3: 11.7 usec per loop

> list: 100000 loops, best of 3: 2.94 usec per loop

> len: 100

> numpy: 100000 loops, best of 3: 12.1 usec per loop

> list: 10000 loops, best of 3: 24.4 usec per loop

> len: 1000

> numpy: 100000 loops, best of 3: 15 usec per loop

> list: 1000 loops, best of 3: 224 usec per loop

> len: 10000

> numpy: 10000 loops, best of 3: 41 usec per loop

> list: 100 loops, best of 3: 2.17 msec per loop

> len: 100000

> numpy: 1000 loops, best of 3: 301 usec per loop

> list: 10 loops, best of 3: 22.2 msec per loop

>

> This is with Python 2.4.5 on Solaris 10. YMMV.

>
Skip,

Your comment is justified for len= 100

or 1,000 but not for len= 10,000 or 100,000.

I wonder about the variability of the

number of loops in your data.

I have tried to repeat your test with

the program below, but it fails to cope

with numpy.

The results for Python 2.5 are:

list: 0.421 0.253

list: 0.427 0.254

list: 0.420 0.250

list: 0.421 0.255

list: 0.415 0.254

list: 0.423 0.254

list: 0.422 0.256

The results for Python 2.6 are:

list: 0.388 0.228

list: 0.410 0.225

list: 0.384 0.227

list: 0.389 0.226

list: 0.390 0.227

The script used above for both 2.5 and

2.6:

# speedUgh.py To compare array timing

##import numpy

import timeit as _t

m= 100 # number of repetitions

values= (10, 100)

numpyRes= []

listRes= []

for n in values:

sn= 'numpy.arange(' + str(n) + ')*3'

t= _t.Timer(sn)

## r= t.repeat(3, m)

## numpyRes.append(sum(t.repeat(3, m))

* 1000000/(3*m*n))

sl='a= [3*k for k in range(' + str(n)

+ ')]'

t= _t.Timer(stmt= sl)

listRes.append( sum(t.repeat(3, m)) *

1000000/(3*m*n))

##print 'numpy:', len(values)*'%8.3f' %

tuple(numpyRes)

print ' list:', len(values)*'%8.3f' %

tuple(listRes)

Colin W.