<div dir="ltr"><div>Is this what you want?</div><div><br></div><div>nlat   = dimsizes(lat)<br>mlon = dimsizes(lon)<br>nmdl = dimsizes(model)<br>npct  = dimsizes(percentile)<br>nst4  = dimsizes(statfour)<br>ngrd = nlat*mlon<br>percentileStatsT = new((/ngrd,nmdl,npct,nst4/),"double")<br><br>pST_1d = ndtooned(percentileStatsT)<br>pST_5d = onedtond(pST_1d,(/nlat,mlon,nmdl,npct,nst4/))</div><div>delete([/percentileStatsT, pST_1d/] )         ; <== only if memory is a problem<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, May 11, 2021 at 1:36 AM Buzan, Jonathan via ncl-talk <<a href="mailto:ncl-talk@mailman.ucar.edu">ncl-talk@mailman.ucar.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi NCL-Talk,<br>
<br>
My script is taking forever to execute because of loops. <br>
I am attempting to remedy this situation by using ndtooned, then executing the commands, followed by rebuilding the array back to nd.<br>
<br>
In my example below percentileStatsT is an array 4d array that is percentileStatsT(lat*lon,model,percentile,statistics), but I need to convert the lat*lon to lat, lon aka a 5d array:<br>
nd_T_percentileStats(lat,lon,model,percentile,statistics)<br>
<br>
However, I am not sure how to convert lat*lon into lat,lon. Is there a command in ncl that will do this?<br>
<br>
Cheers,<br>
-Jonathan<br>
<br>
<br>
Code snippet:<br>
ex.<br>
T(time,lat,lon)  ;my data of temperatures<br>
<br>
;;;create new array to store statistics.;;;;;<br>
model = ispan(0,0,1) ; this will be the unlimited domain<br>
model!0 = "model"<br>
model&model = model<br>
model@long_name = "model"<br>
<br>
percentile = ispan(1,99,1)<br>
percentile!0 = "percentile"<br>
percentile&percentile = percentile<br>
percentile@long_name = "percentile"<br>
<br>
statfour = ispan(0,3,1)<br>
statfour!0 = "statfour"<br>
statfour&statfour = statfour<br>
statfour@long_name = "Mean, SD, Skewness, Kurtosis"<br>
<br>
percentileStatsT  = new((/dimsizes(lat)*dimsizes(lon),dimsizes(model),dimsizes(percentile),dimsizes(statfour)/), "double")<br>
<br>
<br>
;;;;; manipulate data to calculate statistics;;;;;;<br>
T_1d = ndtooned(T(lat|:,lon|:,time|:) ; reorder dimensions and convert to 1d <br>
<br>
;;;;; operate on data;;;;;;;<br>
;;;;; breaks;;;;;;;<br>
do k = 0, (dimsizes(lat) * dimsizes(lon) -1) <br>
        index_time_st = dimsizes(time) * k <br>
        index_time_end = dimsizes(time) * k + (dimsizes(time) -1) <br>
        onedT = T_1d(index_time_st:index_time_end) <br>
        workT_Index = dim_pqsort_n(onedT,2,0) <br>
        manip_T = onedT(workT_Index)    ; reorder data from lowest to highest<br>
        percentile = new((/99/),"integer”) <br>
        do l = 0, dimsizes(percentile) -1 ; time is 29200 data points. dividing the array into percentiles<br>
                starti = 292*l + 146<br>
                endi = 292*(l+1) + 146 -1<br>
                percentileStatsT(k,:,l,:) = dim_stat4(onedT(starti:endi))<br>
        end do<br>
end do<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
ncl-talk mailing list<br>
<a href="mailto:ncl-talk@mailman.ucar.edu" target="_blank">ncl-talk@mailman.ucar.edu</a><br>
List instructions, subscriber options, unsubscribe:<br>
<a href="https://mailman.ucar.edu/mailman/listinfo/ncl-talk" rel="noreferrer" target="_blank">https://mailman.ucar.edu/mailman/listinfo/ncl-talk</a></blockquote></div>