<div dir="ltr"><div><div><div>I would suggest that you do Alan has written. It is very efficient and no separate array need be created.<br><br></div>In &#39;netCDF land&#39;, you will rarely find anything like what you specified. &#39;time&#39; is 99.99% of the time ... one dimensional. <br></div><div><br></div><div><br></div>Please read the following:<br><br><a href="https://www.ncl.ucar.edu/Document/Functions/Built-in/ind.shtml" target="_blank">https://www.ncl.ucar.edu/Document/Functions/Built-in/ind.shtml</a><br><a href="https://www.ncl.ucar.edu/Document/Functions/Built-in/cd_calendar.shtml" target="_blank">https://www.ncl.ucar.edu/Document/Functions/Built-in/cd_calendar.shtml</a><br><br>============<br><div><div><div><div><div><div><div><div><div><div><div><div>Further. there is an issue with your:  x(year,month,day,lat,lon) approach<br><br></div>Unless the calendar is a 360-day  .... The &#39;day&#39; dimension can be 28,29,30 31 ... You must have it as a fixed 31. <br></div></div>The original &#39;time&#39; has no &#39;space holders&#39;. Hence, you can *not* directly  &#39;reshape&#39; the array via NCL functions.<br><br></div><div><br></div>A brute force approach might be (untested) ...<br></div><div>    dimx   = dimsizes(x)<br></div><div>    ntim    = dimx(0)<br></div><div>    nlat     = dimx(1)<br></div><div>    mlon   = dimx(2)<br></div><div><br></div><div>    tinfo    = cd_calendar(time, 0)       ; read about this    (ntim,6)  =&gt; yyyy,mm,dd,hh,mn,sc<br></div><div>    NDAY = 31                                    ; max size<br></div><div>    nmos  = 12<br></div><div>    yrStrt  = toint( tinfo(0,0) )<br></div><div>    yrLast = toint( tinfo( ntim-1,0) )<br></div><div>    nyrs    = yrLast-yrStrt+1    ; (last year) - (first year) +1<br></div>    xnew  = new( (/nyrs,nmos,NDAY,nlat,mlon/), typeof(x), getVarFillValue(x))<br><br></div>then fill xnew via a do loop<br><br></div>   do nt=0,ntim-1<br></div>        nyr   = toint( tinfo(nt,0) ) - yrStrt<br></div>        nmo = toint( tinfo(nt,1) ) - 1         ; NCL indexing starts at 0<br></div>        ndy  = toint( tinfo(nt,2) ) - 1<br></div>        xnew(nyr,nmo,ndy,:,:) =  (/ x(nt,:,:) /)   ; read about (/.../)  ... no meta data transfer<br></div>   end do<br><br></div><div>This is cumbersome. The suggested approach is more efficient and &#39;elegant&#39;<br><br></div><div>Good luck<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 10, 2015 at 10:08 AM, Alan Brammer <span dir="ltr">&lt;<a href="mailto:abrammer@albany.edu" target="_blank">abrammer@albany.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_default" style="font-family:verdana,sans-serif">The easiest way to do this is using the time functions and indexing. </div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">ymdhms = cd_calendar(x, 0) ; </div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">dec_ind = ind(ymdhms(:,1) .eq. 12) ;; find locations where month .eq. 12. </div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">x_dec = x(dec_ind,:,:)</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Adding another 2 dimensions, doesn&#39;t seem necessary. You can stack the ind() function to be as specific or as broad as you like very easily. Will be more flexible than multiple time dimension. </div><span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_default" style="font-family:verdana,sans-serif">​Alan. ​</div><br></div></font></span><span class=""><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On 10 June 2015 at 11:58, Zachary Suriano <span dir="ltr">&lt;<a href="mailto:zsuriano@udel.edu" target="_blank">zsuriano@udel.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br></div>Ultimately I would like to pull out data from each month individually with a statement such as: dec=x( : , 12 , : , : , : ). With leap days present within the dataset, I cannot figure out a way to achieve this without having year, month, day being their own dimensions.<br></blockquote></div><br><br></div></span></div>
<br>_______________________________________________<br>
ncl-talk mailing list<br>
<a href="mailto:ncl-talk@ucar.edu">ncl-talk@ucar.edu</a><br>
List instructions, subscriber options, unsubscribe:<br>
<a href="http://mailman.ucar.edu/mailman/listinfo/ncl-talk" target="_blank">http://mailman.ucar.edu/mailman/listinfo/ncl-talk</a><br>
<br></blockquote></div><br></div>