[Numpy-discussion] Optimize speed of for loop using numpy

Charles R Harris charlesr.harris at gmail.com
Mon Feb 25 23:40:22 EST 2008


On Mon, Feb 25, 2008 at 7:08 PM, Trond Kristiansen <trond at unc.edu> wrote:

>
>
> Hi all.
> This is my first email to the discussion group. I have spent two days
> trying
> to get a particular loop to speed up, and the best result I got was this:
>
> tmp1=zeros((eta,xi),float)
>
> tmp2=zeros((eta,xi),float)
>
> tmp1=tmp1+10000
>
> tmp2=tmp2+10000
>
> for i in range(xi):
>
> for j in range(eta):
>
> for k in range(s):
>
>
>
> if z_r[k,j,i] < depth:
>
> if tmp1[j,i]==10000:
>
> if (depth - z_r[k,j,i]) <= (depth - z_r[0,j,i]):
>
> tmp1[j,i]=k
>
>
> else:
>
> if (depth - z_r[k,j,i]) <= (depth - z_r[int(tmp1[j,i]),j,i]):
>
> tmp1[j,i]=k
>
> elif z_r[k,j,i] >= depth:
>
>
> if tmp2[j,i]==10000:
>
> if abs(depth - z_r[k,j,i]) <= abs(depth - z_r[s-1,j,i]) :
>
> tmp2[j,i]=k
>
>
> else:
>
> if abs(depth - z_r[k,j,i]) <= abs(depth - z_r[int(tmp2[j,i]),j,i]) :
>
> tmp2[j,i]=k
>
> Not very impressive. My problem is that I can not find any numpy functions
> that actually can do the tests I do for each k value in the arrays. I need
> to identify the position (i,j) of k-values that meet the specified
> requirement. There are way too many if-else tests here as well. The
> scripts
> takes about 10 seconds to run (for 238MB input file), but these arrays are
> read from netCDF files and can be much larger and easily grow to enormous
> dimensions. It is therefore crucial for me to speed things up. Hope some
> of
> you can help. I really appreciate all feedback on this. I am just a rooky
> to
> numpy.
>

Python if statements are certain death.

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20080225/97c242ea/attachment.html>


More information about the NumPy-Discussion mailing list