Dear Cory,
You can try to reduce the loop using ndtooned and onedtond function like..
data2d = new((/x*y,z/),float)
do k=z,0,-1
data2d (:,k)= ndtooned(data(:,:,k))
end do
printVarSummary(data2d)
data1d = new((/x*y/),float)
do i=0,x*y-1
if(data2d(i,:).gt.0.0) then
data1d(i)=k
end do
data_final = onedtond(data1d, (/x,y/))
Thanks
Debasish
-----Original Message-----
From: ncl-talk-bounces_at_ucar.edu [mailto:ncl-talk-bounces_at_ucar.edu] On Behalf
Of Cory Wolff
Sent: Tuesday, April 21, 2009 2:11 PM
To: ncl-talk_at_ucar.edu
Subject: finding the top and bottom
I have data in a 3-d array (x,y,z) and would like to create a 2-d array
(x,y) that holds the level at which the values go above a certain
threshold in the z coordinate, starting from the top. I would also use
this to find the same starting from the bottom in a separate array. I
know that I can do this with loops:
do i=0,x
do j=0,y
do k=z,0,-1
if(data(i,j,k).gt.0.0) then
top(i,j) = k
...
That will be really slow, of course, so I'm wondering if I can do it
without resorting to loops. Any help would be appreciated. Thanks.
Cory
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Tue Apr 21 2009 - 17:02:35 MDT
This archive was generated by hypermail 2.2.0 : Fri Apr 24 2009 - 14:12:40 MDT