dot products

Peter Otten __peter__ at web.de
Sun Dec 19 06:48:37 EST 2004


Rahul wrote:

> 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. (By
> the way profiling them i found that the second is faster by about 30%.)

You could try

sigma = 0
for ai, bi in itertools.izip(a, b):
    sigma += ai * bi

or 

sum(itertools.starmap(operator.mul, itertools.izip(a, b)))

but if you are really concerned about number-crunching efficiency, use
Numarray.

Peter




More information about the Python-list mailing list