[Numpy-discussion] Howto vectorise a dot product ?

Tom K. tpk at kraussfamily.org
Wed Jun 10 23:58:09 EDT 2009



bruno Piguet wrote:
> 
>    Can someone point me to a doc on dot product vectorisation ?
> 

As I posted in the past you can try this one liner:
"    numpy.array(map(numpy.dot, a, b)) 
that works for matrix multiply if a, b are (n, 3, 3).   "

This would also work if a is (n, 3, 3) and b is (n, 3, 1)

URL
http://www.nabble.com/Array-of-matrices---Inverse-and-dot-td21666949.html#a21670624          

Maybe write a loop of length 3?

For example, taking a linear combination of columns,

out = np.zeros(a.shape[:-1], a.dtype)
for i in range(a.shape[-1]):
    out += a[..., i]*b[..., i, :]


Now we can vectorize that loop - here's one with no loop that expands the
right array to a larger intermediate array via broadcasting, does
elementwise multiplication, and then sums along the appropriate dimension:
  a=np.random.randn(3,2,2)
  b=np.random.randn(3,2,1)
  (a[..., np.newaxis]*b[..., np.newaxis, :, :]).sum(len(a.shape)-1)

I think I would still prefer a C implementation ... this isn't terribly
readable or optimal (maybe the numeric police can help me out here....!
Help!)

- Tom
-- 
View this message in context: http://www.nabble.com/Howto-vectorise-a-dot-product---tp23949253p23974947.html
Sent from the Numpy-discussion mailing list archive at Nabble.com.




More information about the NumPy-Discussion mailing list