<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Dave&nbsp;<div><br></div><div>&nbsp; This is so smart! &nbsp;Thanks a lot!</div><div><br></div><div>Xiaoming&nbsp;<br><br><div><hr id="stopSpelling">Date: Tue, 19 Apr 2016 15:08:12 -0600<br>Subject: Re: [ncl-talk] quicker way to do maxind ?<br>From: dave.allured@noaa.gov<br>To: yuanfangcan@hotmail.com<br>CC: ncl-talk@ucar.edu; xhu@ou.edu<br><br><div dir="ltr">Xiaoming,<div><br></div><div>Here is an NCL method that is faster than a double loop when ntimes is significantly smaller than ni * nj.&nbsp; Array "x" is the 3-D input data array, same as your "mpr".</div><div><br></div><div><div>&nbsp; xmax = dim_max_n_Wrap (x, 0)</div><div><br></div><div><div>&nbsp; missing_value = -99</div><div>&nbsp; xind = new (dimsizes (xmax), integer, missing_value)</div><div>&nbsp; ntimes = dimsizes (x(:,0,0))</div></div><div><br></div><div>&nbsp; do t = 1, ntimes</div><div>&nbsp; &nbsp; tr = ntimes - t</div><div>&nbsp; &nbsp; mask1 = (x(tr,:,:) .ge. xmax)</div><div>&nbsp; &nbsp; mask1 = where (ismissing (mask1), False, mask1)</div><div>&nbsp; &nbsp; xind &nbsp;= where (mask1, tr, xind)<br></div><div>&nbsp; end do</div><div><br></div><div>This version handles missing values.&nbsp; It could be a little simpler and faster without missing values.</div><div><br></div><div>LIke the maxind function, this example finds the index of the "first occurrence" of the maximum, at each grid point.&nbsp; To find the "last occurrence", simply run the loop forward instead of backward.</div><div><br></div><div>--Dave</div><div><br></div><div class="ecxgmail_extra"><br><div class="ecxgmail_quote">On Tue, Apr 19, 2016 at 11:26 AM, xiaoming Hu <span dir="ltr">&lt;<a href="mailto:yuanfangcan@hotmail.com" target="_blank">yuanfangcan@hotmail.com</a>&gt;</span> wrote:<br><blockquote class="ecxgmail_quote" style="border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex;">


<div><div dir="ltr"><div>&nbsp; I need to get the index of the maximum value at each location.&nbsp;</div><div>&nbsp;&nbsp;</div><div>It turns out the following loop is very slow! &nbsp; (i,j loop between 0-1000)</div><div><br></div><div>&nbsp; do j = &nbsp;0, dimlc(0)-1</div><div>&nbsp; &nbsp; print("working on row "+j)</div><div>&nbsp; &nbsp; do &nbsp;i = &nbsp;0, dimlc(1)-1</div><div>&nbsp; &nbsp; &nbsp;Time_mpr(j,i) = maxind(mpr(:,j,i))</div><div>&nbsp; &nbsp;end do ;</div><div>&nbsp; end do ;</div><div><br></div><div>Better approach to do this quicker?</div><div><br></div><div>Thanks</div><span><font color="#888888"><div>Xiaoming</div></font></span></div></div></blockquote></div></div></div></div></div></div>                                               </div></body>
</html>