[ncl-talk] how to get min index within different sequences

Verena Lili verena.prick at gmail.com
Sun Sep 28 01:30:54 MDT 2014


Hi Mary and NCL,

The logics still produce errors and are not cosistent once I changed the
number of sequences:
see below my test: I actually only have 5 consecutive series but the result
was 7!

*x = (/*-999,-999*,9,5,4,6*,-999,-999*,6,5,*-999*,7,*-999*,25,17,3,2,13,*
-999*,-5,*-999*/)*

x at _FillValue = -999

nx = dimsizes(x)

run_inds = new(nx,integer)   ; array to hold minimum indexes of runs
beg_ind = -1                 ; variables to hold begin and end indexes
end_ind = -1                 ; of consecutive sequences of numbers
irun    = 0                  ; counter for number of runs

;---Loop through each element and collect groups of runs.
do n=0,nx-1
  if(ismissing(x(n))) then
;---Check for a run
    if(beg_ind.ne.-1) then
      run_inds(irun) = beg_ind + minind(x(beg_ind:end_ind))
      irun           = irun + 1
      beg_ind        = -1        ; reset back to -1
    end if
    continue
  end if
  if(beg_ind.eq.-1) then
;---Start a new run
    beg_ind  = n
    end_ind  = n
    prev_ind = n   ; to keep track of consecutive inds
  else
;---Still in a run
    if((n-prev_ind).eq.1) then
      end_ind = n
    else
;---End a current run
      run_inds(irun) = beg_ind + minind(x(beg_ind:end_ind))
      irun           = irun + 1
      beg_ind        = -1        ; reset back to -1
    end if
  end if
;---Special case if on the last number
  if(n.eq.(nx-1).and.beg_ind.ne.-1) then
    run_inds(irun) = beg_ind + minind(x(beg_ind:end_ind))
    irun           = irun + 1
  end if
end do

print("Number of runs      = " + irun)
print("Min indexes of runs = " + run_inds(0:irun-1))


*ncl 43> print("Number of runs      = " + irun)*
*(0) Number of runs      = 7*

*ncl 44> print("Min indexes of runs = " + run_inds(0:irun-1))*
*(0) Min indexes of runs = 3*
*(1) Min indexes of runs = 5*
*(2) Min indexes of runs = 9*
*(3) Min indexes of runs = 11*
*(4) Min indexes of runs = 14*
*(5) Min indexes of runs = 16*
*(6) Min indexes of runs = 19*



On Mon, Sep 22, 2014 at 12:26 PM, Mary Haley <haley at ucar.edu> wrote:

> ​Lili,
>
> In the future, please do not post questions to individual developers when
> you don't get a response on ncl-talk.  It's okay to repost to ncl-talk
> after a few days, because we generally try to answer all questions.
>
> You will need to loop through your array and get the start and end index
> of each consecutive sequence of numbers, and then use NCL's minind function
> to get the index of the minimum of this subset, "i =
> minind(x(beg_index:end_index)". There may be a "cleaner" way to do this,
> but this script should work.
>
> See attached script which uses a slightly more complex input array.
>
> --Mary
>
> On Sat, Sep 20, 2014 at 12:55 AM, Verena Lili <verena.prick at gmail.com>
> wrote:
>
>> Hi Mary,
>>
>> I posted this email to ncl talk (see below) and not getting any response
>> since then. Would you please help me on this simple issue?
>> I've been struggling to figure this out, but not yet get a conclusive
>> result
>>
>> thank you
>>
>>
>> =======================
>> Subject: how to get min index within different sequences
>> To: "ncl-talk at ucar.edu" <ncl-talk at ucar.edu>
>>
>>
>>
>> Hallo,
>>
>> Anyone can suggest how to get the index of the minimum values within
>> different
>> sequences:
>>
>> e.g.:
>>
>>  x = (/-3, -2, -1, 4, 5, 6, 0, -2, 5/)
>>
>>  x at _FillValue=-999
>>  x = where(x.gt.3,x, x at _FillValue)  ; only x>3
>>  print(x)
>>
>> Variable: x
>> (0)     -999
>> (1)     -999
>> (2)     -999
>> (3)     4
>> (4)     5
>> (5)     6
>> (6)     -999
>> (7)     -999
>> (8)     5
>>
>> ; then, how to get *index* pointing the minimum value within these two
>> sequences (3)-(5) and (8),
>> so that the out put will be index:
>>
>> *3 and 8*
>>
>> Thank you.
>>
>>
>> --
>> Regards,
>> Dr. Verena.
>> School of Marine and Atmospheric Sciences
>> Stony Brook University
>> homepage: http://www.somas.stonybrook.edu/
>>
>>
>>
>> --
>> Regards,
>> Dr. Verena.
>> School of Marine and Atmospheric Sciences
>> Stony Brook University
>> homepage: http://www.somas.stonybrook.edu/
>>
>
>


-- 
Regards,
Dr. Verena.
School of Marine and Atmospheric Sciences
Stony Brook University
homepage: http://www.somas.stonybrook.edu/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20140928/fa4e48c7/attachment.html 


More information about the ncl-talk mailing list