Hi,<br><br><div class="gmail_quote">On Wed, May 11, 2011 at 8:28 AM, Elfnor <span dir="ltr"><<a href="mailto:elfnor@gmail.com">elfnor@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Hi<br>
<br>
The following code produces the desired result but has a slow triple loop<br>
iterating over the matrix multiplication.<br>
<br>
I'm sure it can be eliminated with a neat indexing trick but I can't figure<br>
out how.<br>
<br>
Any suggestions please?<br>
-----------------------------<br>
import numpy<br>
#define domain of function<br>
x = numpy.linspace(-5,5,64)<br>
y = numpy.linspace(-5,5,64)<br>
z = numpy.linspace(-5,5,64)<br>
<br>
#calculate f at each point in domain<br>
a = 5.0<br>
b = 3.0<br>
c = 2.0<br>
#ellipsoid<br>
E = numpy.array([[1/a**2,   0   ,   0  ,  0  ],<br>
                [   0   ,1/b**2 ,   0  ,  0  ],<br>
                [   0   ,   0   ,1/c**2,  0  ],<br>
                [   0   ,   0   ,   0  , -1  ]])<br>
<br>
f = numpy.zeros((x.size,y.size,z.size))<br>
<br>
for i,xi in enumerate(x):<br>
    for j,yj in enumerate(y):<br>
        for k,zk in enumerate(z):<br>
            X = numpy.array([xi,yj,zk,1])<br>
            f[i,j,k] = numpy.dot(numpy.dot(X.T,E),X)<br>
-----------------------------------<br></blockquote><div>Something like this:</div><div><font class="Apple-style-span" face="'courier new', monospace">n= 64</font></div><div><font class="Apple-style-span" face="'courier new', monospace">u= np.linspace(-5, 5, n)[None, :]</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">
u0= u.repeat(n** 2)[None, :]<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">u1= u.repeat(n)[None, :].repeat(n, axis= 0).reshape(1, -1)</p>

<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">u2= u.repeat(n** 2, axis= 0).reshape(1, -1)</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">U= np.r_[u0, u1, u2, np.ones((1, n** 3))]</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">f= (np.dot(E, U)* U).sum(0).reshape(n, n, n)</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br>
</font></div><div>Regards,eat</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Thanks Eleanor<br>
<font color="#888888">--<br>
View this message in context: <a href="http://old.nabble.com/Need-to-eliminate-a-nested-loop-tp31591457p31591457.html" target="_blank">http://old.nabble.com/Need-to-eliminate-a-nested-loop-tp31591457p31591457.html</a><br>

Sent from the Numpy-discussion mailing list archive at Nabble.com.<br>
<br>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
</font></blockquote></div><br>