[ncl-talk] quicker way to do maxind ?

xiaoming Hu yuanfangcan at hotmail.com
Tue Apr 19 15:51:19 MDT 2016


Dave 
  This is so smart!  Thanks a lot!
Xiaoming 

Date: Tue, 19 Apr 2016 15:08:12 -0600
Subject: Re: [ncl-talk] quicker way to do maxind ?
From: dave.allured at noaa.gov
To: yuanfangcan at hotmail.com
CC: ncl-talk at ucar.edu; xhu at ou.edu

Xiaoming,
Here is an NCL method that is faster than a double loop when ntimes is significantly smaller than ni * nj.  Array "x" is the 3-D input data array, same as your "mpr".
  xmax = dim_max_n_Wrap (x, 0)
  missing_value = -99  xind = new (dimsizes (xmax), integer, missing_value)  ntimes = dimsizes (x(:,0,0))
  do t = 1, ntimes    tr = ntimes - t    mask1 = (x(tr,:,:) .ge. xmax)    mask1 = where (ismissing (mask1), False, mask1)    xind  = where (mask1, tr, xind)
  end do
This version handles missing values.  It could be a little simpler and faster without missing values.
LIke the maxind function, this example finds the index of the "first occurrence" of the maximum, at each grid point.  To find the "last occurrence", simply run the loop forward instead of backward.
--Dave

On Tue, Apr 19, 2016 at 11:26 AM, xiaoming Hu <yuanfangcan at hotmail.com> wrote:



  I need to get the index of the maximum value at each location.   It turns out the following loop is very slow!   (i,j loop between 0-1000)
  do j =  0, dimlc(0)-1    print("working on row "+j)    do  i =  0, dimlc(1)-1     Time_mpr(j,i) = maxind(mpr(:,j,i))   end do ;  end do ;
Better approach to do this quicker?
ThanksXiaoming 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20160419/c866269e/attachment.html 


More information about the ncl-talk mailing list