<div dir="ltr"><div>On Sun, May 4, 2014 at 9:34 PM, srean <span dir="ltr"><<a href="mailto:srean.list@gmail.com" target="_blank">srean.list@gmail.com</a>></span> wrote:<br></div><div class="gmail_extra"><div class="gmail_quote">
<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"><div dir="ltr">Hi all,<div><br></div><div>  is there an efficient way to do the following without allocating A where</div>
<div><br></div><div> A = np.repeat(x, [4, 2, 1, 3], axis=0)</div><div> c = A.dot(b)    # b.shape</div></div></blockquote><div><br></div><div>If x is a 2D array you can call repeat **after** dot, not before, which will save you some memory and a few operations:<div>
<br></div><div><font face="courier new, monospace">>>> a = np.random.rand(4, 5)</font></div><div><font face="courier new, monospace">>>> b = np.random.rand(5, 6)</font></div><div><font face="courier new, monospace">>>> np.allclose(np.repeat(a, [4, 2, 1, 3], axis=0).dot(b),</font></div>
<div><font face="courier new, monospace">...             np.repeat(a.dot(b), [4, 2, 1, 3], axis=0))</font></div><div><font face="courier new, monospace">True</font></div><div><br></div><div>Similarly, if x is a 1D array, you can sum the corresponding items of b before calling dot:</div>
<div><br></div><div><div><font face="courier new, monospace">>>> a = np.random.rand(4)</font></div><div><font face="courier new, monospace">>>> b = np.random.rand(10)</font></div><div><font face="courier new, monospace">>>> idx = </font><span style="font-family:'courier new',monospace">np.concatenate(([0], np.cumsum([4,2,1,3])[:-1]))</span></div>
<div><font face="courier new, monospace">>>> np.allclose(np.dot(np.repeat(a, [4,2,1,3] ,axis=0), b),</font></div><div><font face="courier new, monospace">...             np.dot(a, np.add.reduceat(b, idx</font><span style="font-family:'courier new',monospace">)))</span></div>
<div><font face="courier new, monospace">... )</font></div><div><font face="courier new, monospace">True</font></div></div></div><div> </div><div>Jaime</div><div><br></div></div>-- <br>(\__/)<br>( O.o)<br>( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus planes de dominación mundial.
</div></div>