<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Dec 24, 2014 at 10:29 AM,  <span dir="ltr"><<a href="mailto:josef.pktd@gmail.com" target="_blank">josef.pktd@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Dec 24, 2014 at 10:30 AM, Julian Taylor <span dir="ltr"><<a href="mailto:jtaylor.debian@googlemail.com" target="_blank">jtaylor.debian@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>On 24.12.2014 16:25, Neal Becker wrote:<br>
> What would be the most efficient way to compute:<br>
><br>
> c[j] = \sum_i (a[i] * b[i,j])<br>
><br>
> where a[i] is a 1-d vector, b[i,j] is a 2-d array?<br>
><br>
> This seems to be one way:<br>
><br>
> import numpy as np<br>
> a = np.arange (3)<br>
> b = np.arange (12).reshape (3,4)<br>
> c = np.dot (a, b).sum()<br>
><br>
> but np.dot returns a vector, which then needs further reduction.  Don't know if<br>
> there's a better way.<br>
><br>
<br>
</span>the formula maps nice to einsum:<br>
<br>
np.einsum("i,ij->", a, b)<br>
<br>
should also be reasonably efficient, but that probably depends on your<br>
BLAS library and the sizes of the arrays.<br></blockquote><div><br></div><div>hijacking a bit since I was just trying to replicate various multidimensional dot products with einsum</div><div><br></div><div>Are the older timings for einsum still a useful guide?</div><div><br></div><div>e.g.</div><div><a href="http://stackoverflow.com/questions/14758283/is-there-a-numpy-scipy-dot-product-calculating-only-the-diagonal-entries-of-the" target="_blank">http://stackoverflow.com/questions/14758283/is-there-a-numpy-scipy-dot-product-calculating-only-the-diagonal-entries-of-the</a><br></div><div><br></div><div>I didn't pay a lot of attention to the einsum changes, since I haven't really used it yet.</div><div><br></div></div></div></div></blockquote><div><br></div><div>It is quite a bit slower for dot products, but very convenient for stacked arrays, vectors, and other such things that are complicated to do with dot products. I find the extra execution time negligible in relation to the savings in programming effort, but the tradeoff might be different for a library.<br><br></div><div>Chuck <br></div></div></div></div>