dot products
Raymond Hettinger
vze4rx4y at verizon.net
Mon Dec 20 21:41:52 EST 2004
[Rahul].
> > I want to compute dot product of two vectors stored as lists a and b.a
> > and b are of the same length.
> >
> > one simple way is
> > sum(a[i]*b[i] for i in range(len(a)))
> >
> > another simple way is
> > ans=0.0
> > for i in range(len(a)):
> > ans=ans+a[i]*b[i]
> >
> > But is there any other way which is faster than any of the above.
>
> Yes:
> from itertools import imap
> from operator import mul
> ans = sum(imap(mul, a, b))
Doh! We all missed it.
If your vector length is known in advance (and it often is in some apps), the
simplest and fastest approach is:
a[0]*b[0] + a[1]*b[1] + a[2]*b[2]
C:\pydev>python timedot.py 3
0.32 sec: a[0]*b[0] + a[1]*b[1] + a[2]*b[2]
1.38 sec: sum(a[i]*b[i] for i in xrange(len(a)))
1.32 sec: sum(x*y for x,y in izip(a,b))
1.62 sec: sum(x*y for x,y in zip(a,b))
0.75 sec: sum(imap(mul, a, b))
1.04 sec: sum(map(mul, a, b))
Raymond Hettinger
More information about the Python-list
mailing list