s...@pobox.com 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.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to