<div dir="ltr"><font face="arial, helvetica, sans-serif">Hi Will,</font><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Given that your 4-D ocean data is T4D(time|nTime,depth|nDepth,lat|nLat,lon|nLon) and you are trying to extract the profile pInd(nProfile,3),</font></div><div><font face="arial, helvetica, sans-serif">where pInd(:,0), pInd(:,1) and pInd(:,2) corresponds to the index of time, lat and lon dimension, respectively. </font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I would try to do the following way:</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">; rearrange the 4-D ocean data</font></div><div><font face="arial, helvetica, sans-serif">T4DR = T4D(depth|:,time|:,lat|:,lon|:) ; make sure all dimensions are named </font></div><div><br></div><div><font face="arial, helvetica, sans-serif">; convert the 4-D data into 2-D data</font></div><div><font face="arial, helvetica, sans-serif">T2D = reshape(T4DR, (/nDepth, nTime*nLat*nLon/))</font></div><div><br></div><div>; convert pInd</div><div>pInd1D = pInd(:,0)*(nLat*nLon) + pInd(:,1)*nLon + pInd(:,2)</div><div><br></div><div>; extract the profile from 2-D data</div><div>TProfile = T2D(:,pInd1D)</div><div><br></div><div>If the above method runs out of memory, you might perform a do loop over the dimension depth, instead of every profile (if you have a huge amount of profiles).</div><div><br></div><div>Regards,</div><div>Hoffman</div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">Will Hobbs <<a href="mailto:will.hobbs@utas.edu.au">will.hobbs@utas.edu.au</a>> 於 2018年10月16日 週二 下午1:53寫道:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-AU" link="#0563C1" vlink="#954F72">
<div class="m_-8128781448368856220WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">Hi all<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">This one is for the NCL ‘Brains Trust’. I’m extracting a large number of ocean profiles from a 4-d array (dimensioned time,depth,lat,lon), using coordinate triplets based on time,lat and lon,
 (i.e. a 2-d array of indices dimensioned nprofile, 3),  but it’s a slow process and I wonder if anyone has any smart ideas on speeding it up.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">At the moment (partly to manage memory), I’m reading each profile in a loop, viz:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">Tprof = new((/nlev,nprofile/),float)<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">do i = 0, nprofile-1<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">     Tprof(:,i) = fi->T(pInd(i,0),:,pInd(i,1),pInd(i,2))    ;pInd is an array with coord triplets<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">end do<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">Obviously one obvious way of speeding things up would be to read the entire array of input data and extract the locations, to avoid multiple i/o calls. What I really want to do though is somehow
 get rid of the loop entirely. Is there any way of extracting coordinate pairs (or in this case triplets) without looping through each profile?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">The only way I can think of is to turn the input array (T in my example above) into a 1-d array, and somehow convert ‘pInd’ into the elements of that 1-d array – this seems fraught with opportunity
 for error though. Catastrophic error I can deal with – it’s the sneaky, inobvious error that scares me….<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">Hoping someone has a great idea….<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt">Will<u></u><u></u></span></p>
</div>
<p style="font-size:10pt;line-height:10pt;font-family:Calibri,sans-serif"><br>
<br>
University of Tasmania Electronic Communications Policy (December, 2014). <br>
This email is confidential, and is for the intended recipient only. Access, disclosure, copying, distribution, or reliance on any of it by anyone outside the intended recipient organisation is prohibited and may be a criminal offence. Please delete if obtained
 in error and email confirmation to the sender. The views expressed in this email are not necessarily the views of the University of Tasmania, unless clearly intended otherwise.
</p>
</div>

_______________________________________________<br>
ncl-talk mailing list<br>
<a href="mailto:ncl-talk@ucar.edu" target="_blank">ncl-talk@ucar.edu</a><br>
List instructions, subscriber options, unsubscribe:<br>
<a href="http://mailman.ucar.edu/mailman/listinfo/ncl-talk" rel="noreferrer" target="_blank">http://mailman.ucar.edu/mailman/listinfo/ncl-talk</a><br>
</blockquote></div>